这期内容当中小编将会给大家带来有关什么方法能够有效应对SQL注入攻击,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
能够有效应对SQL注入攻击的方法是:PreparedStatement(预编译语句集)。预编译语句集内置了处理SQL注入的能力,我们只需要使用它的setxxx方法传值即可。
引用><强> 1,(简单又有效的方法)PreparedStatement 强>
采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setxxx方法传值即可。
使用好处:
(1)代码的可读性和可维护性。
(2) PreparedStatement尽最大可能提高性能。
(3)最重要的一点是极大地提高了安全性。
原理:
SQL注入只对SQL语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,而不再对SQL语句进行解析,准备,因此也就避免了SQL注入问题。
<强> 2,使用正则表达式过滤传入的参数强>
要引入的包:
进口java.util.regex。*;正则表达式:
私人字符串CHECKSQL=" ^(+) \ \砂\ \ s(+) |(+) \ \琼(+)\ \“新元;判断是否匹配:
Pattern.matches (CHECKSQL targerStr);下面是具体的正则表达式:
检测SQL元字符的正则表达式:<代码>/(\ % 27)| (\ & # 39;)| (\ \)| (\ % 23)| (#)/ix 代码>
修正检测SQL元字符的正则表达式:<代码>/((\ % 3 d) | (=)) (^ \ n) * ((\ % 27) | (\ & # 39;) | (\ \) | (\ % 3 b) |(:))/我代码>
典型的SQL注入攻击的正则表达式:<代码>/\ w * ((\ % 27) | (\ & # 39;)) ((\ % 6 f) | |阿(\ % 4 f)) ((\ % 72) r | | (\ % 52))/ix 代码>
检测SQL注入,工会查询关键字的正则表达式:<代码>/((\ % 27)|(\ & # 39;))联盟/ix(\ % 27) |(\ & # 39;) 代码>
检测MS SQL Server SQL注入攻击的正则表达式:<代码>/exec (\ s | \ +) + (s | x) p \ w +/ix 代码>
等等……
<强> 3,字符串过滤强>
比较通用的一个方法:
(| |之间的参数可以根据自己程序的需要添加)
公共静态布尔sql_inj (String str) { 字符串inj_str=? # 39; |和|执行| |选择|删除插入| |更新 count | * | % | | | |大师中期从而向截断|字符|声明|;|和| - | + |,“; 字符串inj_stra[]=分裂(inj_str”|“); for (int i=0;我和lt;inj_stra。长度;我+ +){ 如果(str.indexOf (inj_stra[我]),gt;=0) { 返回true; } } 返回错误; }<强> 4,jsp中调用该函数检查是否包函非法字符强>
防止SQL从URL注入:
sql_inj。java代码:
包sql_inj; 进口java.net。*; 进口. io . *; 进口java.sql。*; 进口text . *; 进口以; 公开课sql_inj { 公共静态布尔sql_inj (String str) { 字符串inj_str=? # 39; |和|执行| |选择|删除插入| |更新 count | * | % | | | |大师中期从而向截断|字符|声明|;|和| - | + |,“;//这里的东西还可以自己添加 String [] inj_stra=inj_str.split (“\ \ |“); for (int i=0;我和lt;inj_stra。长度;我+ +){ 如果(str.indexOf (inj_stra[我]),gt;=0) { 返回true; } } 返回错误; } }上述就是小编为大家分享的什么方法能够有效应对SQL注入攻击了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
什么方法能够有效应对SQL注入攻击