使用正则解决SQL注入问题

在处理一些老接口的时候,发现之前很多接口的写法是前端传参后端直接拼写的方式,这种方式很容易产生sql注入,目前解决失去了注入的方式有

1.使用#符号做占位符,在动态解析时会被解析成?,而$会是""

sql 复制代码
-- 使用#{}时?会是占位符就算 name = "小米 or 1=1"也查不出来
select * from b where name = "?"


--使用${}是会变成 name = 小米 or 1=1
select * from b where name = 

2.使用PreparedStatement,PreparedStatement具有预编译功能

3.对敏感参数过滤

4.nginx反向代理防止SQL注入

因为我做的是老接口以后可能不维护,所以这里简单的用第三种:

复制代码
//算是一种穷尽出可能出现的关键字,校验input中是否包含某些关键字
public static boolean containsWord(String input) {
        if (StringUtils.isEmpty(input)){
            return false;
        }
        String badStr =
                "select|update|and|or|delete|insert|truncate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute|table|"+
                        "char|declare|sitename|xp_cmdshell|like|from|grant|use|group_concat|column_name|" +
                        "information_schema.columns|table_schema|union|where|order|by|" +
                        "*|;|+|,|//|/|%|#";
       String[] arr = badStr.split("\\|");
        for (String s : arr) {
            String regex = "\\b" + Pattern.quote(s) + "\\b";
           Boolean isTure =  Pattern.compile(regex).matcher(input).find();
           if (isTure){
               return true;
           }
        }
       return false;
    }
相关推荐
什么都不会的Tristan2 分钟前
redis-原理篇-Dict
数据库·redis·缓存
数据知道5 分钟前
亿级图片链接存入 PostgreSQL,URL链接字段数据类型用哪个最合适?
数据库·postgresql
马克学长5 分钟前
SSM学生综合素质评价系统wy345(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·学生综合素质评价系统·家校协同
煎蛋学姐7 分钟前
SSM学生宿舍管理系统a55l1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学生宿舍管理系统·ssm 框架
xuefuhe8 分钟前
PG权限privilege
数据库
重生之绝世牛码14 分钟前
Linux软件安装 —— Redis集群安装(三主三从)
大数据·linux·运维·数据库·redis·数据库开发·软件安装
知识分享小能手26 分钟前
Oracle 19c入门学习教程,从入门到精通,Oracle 过程、函数、触发器和包详解(7)
数据库·学习·oracle
l1t29 分钟前
净化SQL的PL/pgSQL函数
数据库·sql·postgresql
程序员敲代码吗30 分钟前
如何从Python初学者进阶为专家?
jvm·数据库·python
Hello.Reader35 分钟前
Flink MongoDB SQL Connector Scan/Lookup/Sink 全打通,Upsert、分片集群与缓存一篇讲透
sql·mongodb·flink