ibatis的SQL注入,证实了我此前的想法

转载 2009年06月04日 15:53:00

在项目中,运用Ibatis中Like写法,没有研究下,结果SQL语句存在SQL注入漏洞,整理下,下次谨记啊!

sql语句:

Sql代码
  1. select  *  
  2.         from  ( select  1  from  poll  
  3.         <dynamic  prepend= " where " >  
  4.             <isNotEmpty prepend=" and "  property= "title" >  
  5.                 title like   '%$title$%'   
  6.             </isNotEmpty>  
  7.             <isNotEmpty property="used" >  
  8.                 <isEqual compareValue="true"  prepend= " and "  property= "used" >  
  9.                     <![CDATA[status & 2 > 0 and  status & 1 <= 0  and  status & 8 <= 0 ]]>  
  10.                 </isEqual>  
  11.             </isNotEmpty>  
  12.             <isNotEmpty prepend=" and "  property= "startTimeBegin" >  
  13.                 <![CDATA[ gmt_create >= #startTimeBegin# ]]>  
  14.             </isNotEmpty>  
  15.             <isNotEmpty prepend=" and "  property= "startTimeEnd" >  
  16.                 <![CDATA[ gmt_create <= #startTimeEnd# ]]>  
  17.             </isNotEmpty>  
  18.         </dynamic >  
  19.         limit 10000  
  20.         ) as  t  

 请关注此写法的:

Sql代码
  1. title  like   '%$title$%'   

存在SQL注入漏洞。

下面是一段单元测试:

Java代码
  1. PollQuery query =  new  PollQuery();  
  2. query.setCurrentPage(1 );  
  3. query.setPageSize(50 );  
  4. query.setTitle("1231%' or '1%' = '1" ); //很简单的写法:(   
  5. List<SnsPollDO> l = pollDAO.findPollList(query);  
  6. System.out.println(l.size())  

 测试结果(打印处的sql语句):

Java代码
  1. select * from poll   where    title like  '%1231%'  or  '1%'  =  '1%'   

尽管 title 没匹配对,但是or后面那句是恒等的。哎!

看来下面的写法只是简单的转义下:

Sql代码
  1. title  like   '%$title$%'   

如何解决:

在oracle下面改成:title like '%'||#title#||'%',这样肯定是可以的。

但是在mysql中,上述写法是不行,还是有上面的问题的:

Sql代码
  1. select   *  from  poll  where   title  like   '%' ||?|| '%'    order   by  gmt_create  desc    limit ?, ?  

 还能查出结果来!哎!

得用:title CONCAT('%',#title#,'%')

Sql代码

select  *  from  poll   where   title  like  CONCAT( '%' ,?, '%' )   order   by  gmt_create  desc  limit ?, ?

呵呵,多次测试均没有发现问题!

 

------------------------------------------

以下读者注:

是否为:title like CONCAT('%',#title#,'%')

ibatis解决sql注入问题

对于ibaits参数引用可以使用#和$两种写法,其中#写法会采用预编译方式,将转义交给了数据库,不会出现注入问题;如果采用$写法,则相当于拼接字符串,会出现注入问题。 例如,如果属性值为“' or ...
  • scorpio3k
  • scorpio3k
  • 2012年05月28日 23:11
  • 12679

ibatis防止sql注入

本文转载自:          http://blog.csdn.net/scorpio3k/article/details/7610973         http://www.blogjava...
  • liuxigiant
  • liuxigiant
  • 2014年10月10日 15:37
  • 1406

iBatis解决自动防止sql注入

#xxx# 代表xxx是属性值,map里面的key或者是你的pojo对象里面的属性, ibatis会自动在它的外面加上引号,表现在sql语句是这样的where xxx = 'xxx' ; (1)ib...
  • cnbird2008
  • cnbird2008
  • 2012年04月16日 21:57
  • 8625

Web开发常见的几个漏洞解决方法 ---SQL注入

平时工作,多数是开发Web项目,由于一般是开发内部使用的业务系统,所以对于安全性一般不是看的很重,基本上由于是内网系统,一般也很少会受到攻击,但有时候一些系统平台,需要外网也要使用,这种情况下,各方面...
  • superdog007
  • superdog007
  • 2014年06月12日 09:33
  • 12751

JDBC如何有效防止SQL注入

JDBC批量插入数据优化,使用addBatch和executeBatch 在之前的玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入 ...
  • u010785585
  • u010785585
  • 2016年12月21日 07:53
  • 2850

CI框架中的SQL注入隐患

0x00 在CI框架中,获取get和post参数是使用了$this->input类中的get和post方法。 其中,如果get和post方法的第二个参数为true,则对输入的参数进行XSS过滤,注意只...
  • u011721501
  • u011721501
  • 2015年03月31日 23:14
  • 4694

ibatis简单使用的想法

  • 2013年07月01日 17:19
  • 9.61MB
  • 下载

突破SQL注入限制的一点想法

突然想我们是否可以用什么方法绕过SQL注入的限制呢?到网上考察了一下,提到的方法大多都是针对AND与“'”号和“=”号过滤的突破,虽然有点进步的地方,但还是有一些关键字没有绕过,由于我不常入侵网站所以...
  • kezhen
  • kezhen
  • 2013年08月04日 21:26
  • 1048

ibatis与SQL注入

SQL注入示范: Sql注入例一 TITLE like '%$title$%' title传入a';drop table account;-- --告诉数据库忽略drop table 之后的字符,即数...
  • cavalier_anyue
  • cavalier_anyue
  • 2015年09月29日 14:15
  • 293

SQL纵向变成横向,横向变成纵向(经典案例添加自己的想法)

------------------------------------------- name  subject   result 张三 语文 73 张三 数学 83 张三 物理 9...
  • suheonline
  • suheonline
  • 2013年12月20日 15:51
  • 3624
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ibatis的SQL注入,证实了我此前的想法
举报原因:
原因补充:

(最多只允许输入30个字)