原理:sql注入只对sql语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,而不再对sql语句进行解析,准备,因此也就避免了sql注入问题.
2.使用正则表达式过滤传入的参数
正则表达式: 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 等等…..
其实可以简单的使用replace方法也可以实现上诉功能:
3.字符串过滤
比较通用的一个方法:(||之间的参数可以根据自己程序的需要添加)
4.jsp中调用该函数检查是否包函非法字符
防止SQL从URL注入:
sql_inj.java代码:
5.JSP页面添加客户端判断代码:
使用javascript在客户端进行不安全字符屏蔽
功能介绍:检查是否含有”‘”,”\”,”/”
参数说明:要检查的字符串
返回值:0:是1:不是
总结
以上就是本文关于SQL注入原理与解决方法代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅:MYSQL updatexml()函数报错注入解析、几个比较重要的MySQL变量、ORACLE SQL语句优化技术要点解析等,如有不足之处,欢迎留言指出,小编会及时回复大家并修改。感谢朋友们对本站的支持!