iBatis解决sql注入问题的方法

来源:互联网 发布:网络攻防技术pdf 编辑:程序博客网 时间:2024/05/01 13:22


类似下列这种写法是采用preparedStatement实现,是不会引起sql注入的
   <isNotEmpty prepend="AND" property="name"> 
      name like #name#
   </isNotEmpty> 
但是它跟
   <isNotEmpty prepend="AND" property="name"> 
      name = #name#
   </isNotEmpty>

没有区别,没有实现模糊查询,实现模糊查询的简单方法是这样:

<isNotEmpty prepend="AND" property="name"> 
      name like '%$name$%'
</isNotEmpty>

但这时会导致sql注入问题,比如参数name传进一个单引号“'”,生成的sql语句会是:

name like '%'%'

这样肯定是会报错的,解决方法是利用字符串连接的方式来构成sql语句,如下:

<isNotEmpty prepend="AND" property="name"> 
      name like '%'||'#name#'||'%'
   </isNotEmpty>

(“||”是Oracle中连接字符串的方法,MSSQL中是用加号,MySQL中是用CONCAT)

这样参数都会经过预编译,就不会发生sql注入问题了。


原文出处:http://hi.baidu.com/uponcen/item/be9224d0cc6a5d15d80e4433

原创粉丝点击