来源:自学PHP网 时间:2015-04-17 13:03 作者: 阅读:次
[导读] 在项目中,运用Ibatis中Like写法,没有研究下,结果SQL语句存在SQL注入漏洞,整理下,下次谨记啊!sql语句:select * from ( select 1 from poll dynamic prepend= where isNotEmpty pre......
在项目中,运用Ibatis中Like写法,没有研究下,结果SQL语句存在SQL注入漏洞,整理下,下次谨记啊!
sql语句: select * from ( select 1 from poll <dynamic prepend= " where " > <isNotEmpty prepend=" and " property= "title" > title like '%$title$%' </isNotEmpty> <isNotEmpty property="used" > <isEqual compareValue="true" prepend= " and " property= "used" > <![CDATA[status & 2 > 0 and status & 1 <= 0 and status & 8 <= 0 ]]> </isEqual> </isNotEmpty> <isNotEmpty prepend=" and " property= "startTimeBegin" > <![CDATA[ gmt_create >= #startTimeBegin# ]]> </isNotEmpty> <isNotEmpty prepend=" and " property= "startTimeEnd" > <![CDATA[ gmt_create <= #startTimeEnd# ]]> </isNotEmpty> </dynamic > limit 10000 ) as t select * from (select 1 from poll <dynamic prepend=" where "> <isNotEmpty prepend=" and " property="title"> title like '%$title$%' </isNotEmpty> <isNotEmpty property="used"> <isEqual compareValue="true" prepend=" and " property="used"> <![CDATA[status & 2 > 0 and status & 1 <= 0 and status & 8 <= 0 ]]> </isEqual> </isNotEmpty> <isNotEmpty prepend=" and " property="startTimeBegin"> <![CDATA[ gmt_create >= #startTimeBegin# ]]> </isNotEmpty> <isNotEmpty prepend=" and " property="startTimeEnd"> <![CDATA[ gmt_create <= #startTimeEnd# ]]> </isNotEmpty> </dynamic> limit 10000 ) as t 请关注此写法的: title like '%$title$%' title like '%$title$%' 存在SQL注入漏洞。 下面是一段单元测试: Java代码 PollQuery query = new PollQuery(); query.setCurrentPage(1 ); query.setPageSize(50 ); query.setTitle("1231%' or '1%' = '1" ); //很简单的写法:( List<SnsPollDO> l = pollDAO.findPollList(query); System.out.println(l.size()) [java] view plaincopy PollQuery query = new PollQuery(); query.setCurrentPage(1); query.setPageSize(50); query.setTitle("1231%' or '1%' = '1");//很简单的写法:( List<SnsPollDO> l = pollDAO.findPollList(query); System.out.println(l.size()) 测试结果(打印处的sql语句): select * from poll where title like '%1231%' or '1%' = '1%' [java] view plaincopy 1. select * from poll where title like '%1231%' or '1%' = '1%' 尽管title 没匹配对,但是or后面那句是恒等的。哎! 看来下面的写法只是简单的转义下: title like '%$title$%' title like '%$title$%' 如何解决: 在oracle下面改成:title like '%'||#title#||'%',这样肯定是可以的。 但是在mysql中,上述写法是不行,还是有上面的问题的: select * from poll where title like '%' ||?|| '%' order by gmt_create desc limit ?, ? select * from poll where title like '%'||?||'%' order by gmt_create desc limit ?, ? 还能查出结果来!哎! 得用:title CONCAT('%',#title#,'%') select * from poll where title like CONCAT( '%' ,?, '%' ) order by gmt_create desc limit ?, ? 呵呵,多次测试均没有发现问题! ------------------------------------------ 以下读者注: 是否为:title like CONCAT('%',#title#,'%') 作者 oswin_jiang的专栏 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com