Java如何有效避免SQL注入漏洞的方法总结_第1页
Java如何有效避免SQL注入漏洞的方法总结_第2页
Java如何有效避免SQL注入漏洞的方法总结_第3页
Java如何有效避免SQL注入漏洞的方法总结_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Java如何有效避免SQL注入漏洞的方法总结1、简单又有效的方法是使用PreparedStatement

2、使用过滤器

防止sql注入的一些建议

总结

1、简单又有效的方法是使用PreparedStatement

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

好处:

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

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

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

原理:

SQL注入只对SQL语句的编译过程有破坏作用,而PreparedStatement的SQL语句编译阶段已经准备好了,执行阶段只是把输入串作为数据处理,而不再对SQL语句进行解析、准备,因此也就避免了SQL注入问题。

一些热门ORM框架在处理SQL时候也都使用了PreparedStatement,比如MyBatis。

我们在使用MyBatis要注意:在注入参数值得时候使用#{xxx},#{xxx}已经启用了预编译功能,在SQL执行前,会先将上面的SQL发送给数据库进行编译;执行时,直接使用编译好的SQL,替换占位符就可以了。因为SQL注入只能对编译过程起作用,所以这样的方式就很好地避免了SQL注入的问题。

${xxx}这样格式的参数会直接参与SQL编译,从而不能避免注入攻击。

有时有些操作要使用这种方式,比如传入表,模糊匹配等。这时可以使用bind+#{}防止SQL注入(#{}进行预编译,传递的参数不进行编译,只作为参数,相当于PreparedStatement)。

bind元素可以从OGNL表达式中创建一个变量并将其绑定到上下文。比如:

selectid=selectBlogresultType=Blog

bindname=patternvalue=%+_parameter.getTitle()+%/

SELECT*FROMBLOGWHEREtitleLIKE#{pattern}

/select

2、使用过滤器

如果我们做不到所有的SQL语句都使用PreparedStatement,我们可以使用过滤器,进行全局的拦截这些字符串。在过滤器中,使用正则表达式过滤传入的参数。使用正则表达式,判断是否匹配:

Stringbegin=您的请求参数信息

//可以通过配置文件,去配置这些特殊字符,以便随时添加一些关键字。

Stringpattern=|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|char|declare|sitename|netuser|xp_cmdshell|;|or|-|+|,|like

Patternr=Ppile(pattern);

MatcherisMatch=r.matcher(begin);

if(isMatch.find()){

//危险请求参数

}

防止sql注入的一些建议

1.代码层防止sql注入攻击的最佳方案就是sql预编译

publicListCourseorderList(StringstudentId){

Stringsql=selectid,course_id,student_id,statusfromcoursewherestudent_id=

returnjdbcTemplate.query(sql,newObject[]{studentId},newBeanPropertyRowMapper(Course.class));

这样我们传进来的参数4or1=1就会被当作是一个student_id,所以就不会出现sql注入了。

2.确认每种数据的类型,比如是数字,数据库则必须使用int类型来存储

3.规定数据长度,能在一定程度上防止sql注入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论