在项目中,运用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
请关注此写法的:
title like '%$title$%'
存在SQL注入漏洞。
下面是一段单元测试:
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语句):
1. select * from poll where title like '%1231%' or '1%' = '1%'
尽管 title 没匹配对,但是or后面那句是恒等的。哎!
看来下面的写法只是简单的转义下:
title like '%$title$%'
如何解决:
在oracle下面改成:title like '%'||#title#||'%',这样肯定是可以的。
但是在mysql中,上述写法是不行,还是有上面的问题的:
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 ?, ?
呵呵,多次测试均没有发现问题!
分享到:
相关推荐
在ibatis日志信息中打印SQL语句的方法(个人总结)
方法一:利用google高级搜索,比如搜索url如.asp?... 您可能感兴趣的文章:Java面试题解析之判断以及防止SQL注入SQL注入原理与解决方法代码示例通过ibatis解决sql注入问题Win2003服务器防SQL注入神器–D盾_IIS防火墙
最近遇到需要批量update数据的问题,一开始用了一个for循环去update,数据量大的时候效率很低。原因是for循环每次update一条语句,都是一次连接过程。遇到大批数据更新的时候,效率就可想而知了。在google上找了一遍...
通过java程序查看ibatis配置文件中的sql语句(注:无法查看变量值)
ibatis 开发指南 和 iBATIS-SqlMaps两本图书
主要介绍了通过ibatis解决sql注入问题,需要的朋友可以参考下
iBatis最全的动态SQL语句,你需要的都有,资源在于大家共享
主要是关于oracle ibatis 的一些sql
[iBATIS]sql转换工具 简单哦~ 项目组自己写的哦~分享给大家了
ibatis学习 ibatis总结 ibatis ibatis ibatis
ibatis sql语句对条件中特殊字符% # 处理
ibatis sql生成器 部署成web app 支持多数据库。
ibatis动态注入
ibatis2.0+sqlserver2005环境搭建
iBATIS-SqlMaps-2_cn中文文档
ibatis16个常用sql语句
ibatis常用sql语句,简单易懂,方便查询,初学者宝典
ibatis 批量 增删改查
动态sql拼接
ibatis sql 语句的编写 ,包括增删改查,很简单 很实用 ,对初学者是很好的选择