防止sql注入的方法

防止sql注入从前端的页面到后台可以分为以下几个办法:

1.在前端页面就可以用js过滤数据

要引入的包:

import Java.util.regex.*;

正则表达式:

private String CHECKSQL = “^(.+)\sand\s(.+)|(.+)\sor(.+)\s$”;

判断是否匹配:

Pattern.matches(CHECKSQL,targerStr);

下面是具体的正则表达式:

检测SQL meta-characters的正则表达式 :

/(\%27)|(’)|(--)|(\%23)|(#)/ix

修正检测SQL meta-characters的正则表达式 :/((\%3D)|(=))[^ ]*((\%27)|(’)|(--)|(\%3B)|(:))/i

典型的SQL 注入攻击的正则表达式 :/w*((\%27)|(’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

检测SQL注入,UNION查询关键字的正则表达式 :/((\%27)|(’))union/ix(\%27)|(’)

检测MS SQL Server SQL注入攻击的正则表达式:

/exec(s|+)+(s|x)pw+/ix 

2.后台可以使用预编译,参数化查询的方法防止sql注入

采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。

使用好处:

(1).代码的可读性和可维护性.

(2).PreparedStatement尽最大可能提高性能.

(3).最重要的一点是极大地提高了安全性.

原理:

sql注入只对sql语句的准备(编译)过程有破坏作用

而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,

而不再对sql语句进行解析,准备,因此也就避免了sql注入问题. 

3.对密码一类敏感的信息不要直接明文存储,可以采用MD5或hash加密

4.异常信息不要直接抛出给用户,最好自定义处理异常信息的类,因为异常信息里也包括关于服务器的一些信息可能被利用。

原文地址:https://www.cnblogs.com/blythe/p/7434753.html