以前好像做的项目都没有太注重这一块,对于用户输入的一些信息也没去检查,现在想想还是很容易出问题的,还是写下来记录一下。
百度词条:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。
浏览了大部分帖子,关于预防的方法主要分为两类:
一.采用JDBC的PreparedStatement预编译方式。
这种方式是需要设置参数类型和参数的,如果说类型不一样是没办法执行通过的,或者有恶意sql如“;drop table users”这样的参数,是会被当成参数的,而不是执行语句去执行,所以这种方式是可以完全避免的。
PreparedStatement不止能预防sql注入,而且效率也会比较高,也能支持编程式事务的回滚,但就我个人而言的话,感觉PreparedStatement代码比较多,一般在重要的操作中会用它,其它时候还是会用spring的JDBC操作直接操作。
二.采用java的filter功能:
在服务器接收参数时就把用户提交的参数给过滤掉,如:param.replaceAll(".*([';]+|(--)+).*", " ");将特殊字符全部换掉置为空串。
这个处理也可以是对sql语句的操作,如:sql.replaceAll(".*([';]+|(--)+).*", " ");