- 浏览: 82934 次
- 性别:
- 来自: 湖南
文章分类
- 全部博客 (89)
- java (37)
- drools (1)
- web (10)
- 数据库 (4)
- Spring (1)
- Hibernate (1)
- Struts (0)
- Struts2 (0)
- SQL (1)
- Python (1)
- Flex (6)
- 离线支付 (1)
- 搜索,检索 (1)
- junit (1)
- Velocity (1)
- ext (1)
- flush (0)
- js (3)
- winp7 (0)
- pdf (3)
- 管理 (5)
- script (1)
- test (1)
- Tomcat (1)
- 服务部署 (1)
- HTML (1)
- PDF加水印 (1)
- 随机数 (0)
- Eclipse (5)
- OSGI (4)
- bndtools (4)
- felix (4)
- OSGIWeb (1)
最新评论
-
zly168:
很牛
日期控件(时-分-秒) -
aij:
[color=cyan][/color][size=xx-sm ...
web Service -
ywxowen999:
这位兄弟,不知道你研究过Concurrent.Thread的源 ...
js 线程 -
BigBird2012:
你好,你能不能将你的源码给我发一份呢,我参考一下,谢谢!
29 ...
JBPM工作流
在项目中,运用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的专栏
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的专栏
发表评论
-
Bndtools教程
2014-04-18 18:51 2341Bndtools教程 介绍了组件开发与Bndtool ... -
强大的OSGI开发工具BndTools和命令
2014-04-18 18:48 3708bndTools为我们提供了一种使用Eclipse开发OS ... -
Eclipse 快速增加 插件
2014-04-16 16:06 810在eclipse上安装 Marketplace Client ... -
随机数
2014-01-16 16:00 0System.out.println((int)((Math. ... -
数字精度控制
2012-06-01 14:48 0Java 数字精度控制:格式为小数点后两位 DecimalF ... -
test
2011-09-06 13:23 732test2 -
好看的后台模板
2011-06-21 22:07 10286月15后 -
java.io.ZipInputStrean
2011-05-17 16:07 666//解压zip //java.io.ZipIn ... -
abcdefy
2011-05-16 10:24 688abcdefy -
task
2011-05-07 08:01 606tasktasktasktask -
screen-paint1.00.003
2011-04-04 08:47 671sdfdsfdsfds -
(Interpreter)模式:
2011-04-04 07:33 813解释器(Interpreter)模 ... -
与百度地图API
2011-04-04 07:28 781http://baidu.csdn.net/apicontes ... -
Aspose.Pdf
2011-03-22 17:01 786Aspose.Pdf 有例子 -
DbTest Ibatis
2011-03-22 15:39 11651[vo].ServiceDto.java Service ... -
myEclipse8.5优化
2011-03-20 15:30 698http://www.iteye.com/topic/7895 ... -
Java内存泄露
2011-03-19 18:23 845http://cache.baidu.com/c?m=9d78 ... -
java解析Xls
2011-03-17 15:11 895public static void main(Strin ... -
Hibernate联合主键
2011-03-14 16:06 1378package pojo; /** * 一个测试 ... -
IO流
2011-03-10 17:50 806对Unix\Linux有点了解的人,都知道“流”这个概念是多么 ...
相关推荐
方法一:利用google高级搜索,比如搜索url如.asp?... 您可能感兴趣的文章:Java面试题解析之判断以及防止SQL注入SQL注入原理与解决方法代码示例通过ibatis解决sql注入问题Win2003服务器防SQL注入神器–D盾_IIS防火墙
iBatis解决SQL注入问题 iBatis是一个流行的持久层框架,广泛应用于Java企业级开发中。然而,在使用iBatis时,开发人员经常面临着SQL注入问题。SQL注入是一种常见的安全威胁,可能会导致数据泄露、数据篡改、系统...
2. 需要手动管理SQL语句,可能会引发SQL注入问题。 3. 与ORM框架相比,iBATIS的功能相对较少,例如缺少实体类的自动映射。 总的来说,iBATIS SQL Maps为Java开发提供了一种有效的数据库访问方案,通过学习和掌握其...
iBATIS,作为一款优秀的持久层框架,提供了强大的动态SQL功能,解决了直接使用JDBC时编写复杂动态SQL的难题。本文将深入探讨iBATIS动态注入的相关知识点。 iBATIS动态SQL主要通过XML映射文件中的特定标签实现,允许...
iBATIS SQL Maps官方中文教程是一份非常宝贵的资源,它为初学者和进阶开发者提供了深入理解iBATIS SQL Maps的途径。iBATIS是一个Java框架,它将应用程序的业务逻辑与数据库操作分离,简化了数据访问层的开发。SQL ...
在实际应用中,iBATIS SQL Maps常与其他Java框架(如Spring)集成,以实现更强大的功能,如AOP(面向切面编程)和依赖注入。同时,随着技术的发展,iBATIS已被MyBatis所取代,但其设计理念和核心思想在MyBatis中得以...
虽然iBATIS 自带了完整的数据访问能力,但常常与Spring框架一起使用,以利用Spring的依赖注入和AOP(面向切面编程)特性。通过Spring的DataSourceTransactionManager和SqlSessionFactoryBean,可以轻松地将iBATIS ...
3. **参数绑定**:在iBatis映射文件中,可以使用占位符绑定动态参数,实现SQL语句的参数化,提高安全性并防止SQL注入。 综上所述,这个项目演示了如何结合ASP.NET MVC、iBatis和SQL来构建一个简单的Web应用程序。...
例如,`select * from PRODUCT where PRD_CAT_ID = #{value}`中的`#{value}`是预编译参数,能有效防止SQL注入。 总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和...
**IBatis SQL Maps 入门教程** 在Java Web开发领域,数据访问层的实现往往是一个重要的环节。Ibatis,作为一个轻量级的持久层框架,为开发者提供了灵活的SQL映射机制,使得数据库操作变得更加简单。这篇入门教程将...
其中`#value#`表示传入的实际参数值,通过这种方式实现了SQL语句的参数化,避免了SQL注入等安全问题。 ### 二、插入操作 接下来是第二条SQL语句: ```xml parameterClass=...
iBATIS SQL Maps是早期Java开发中广泛使用的持久层框架,它允许开发者将SQL语句直接集成到XML配置文件中,实现数据访问层与业务逻辑层的解耦。本教程将深入探讨iBATIS的核心概念、功能以及如何在实际项目中有效应用...
- Spring与iBATIS整合:讲解如何将iBATIS与Spring框架集成,实现依赖注入和事务管理。 - 性能优化:提供性能调优的策略,包括缓存使用、批处理等技巧。 这四本教程全面覆盖了iBATIS的核心概念和实践应用,无论你...
《iBATIS-SqlMaps-2_cn.rar》是一款关于iBATIS框架的中文教程资源,主要针对想要深入了解和使用iBATIS与Spring集成的初学者。这个压缩包包含了一个PDF文档,即《iBATIS-SqlMaps-2_cn.pdf》,它是iBATIS SQL Maps 2的...
PreparedStatement支持预编译,提高性能并防止SQL注入;SimpleStatement则用于简单的SQL执行。 3. **ParameterMap**和**ParameterValuePair**:用于传递SQL查询参数。ParameterMap定义了参数和它们的映射关系,...
在ibatis demo中,我们可能还会看到如何配置Spring与Ibatis的集成,以便利用Spring的依赖注入和事务管理能力。这通常涉及`SqlSessionFactoryBean`的配置以及Mapper接口的扫描和装配。 通过这个demo,你可以了解到...
尽管手动拼接 SQL 字符串是一种简单有效的方法,但在实际项目中还应注意以下几点: 1. **安全性**:使用预编译语句(PreparedStatement)来避免 SQL 注入等问题。 2. **性能优化**:对于频繁执行的 SQL 语句,可以...
接下来,iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,允许开发者更加灵活地控制SQL执行。iBatis可以方便地集成到Spring中,形成一个强大的数据访问解决方案。 在SQL Server 2005中,数据插入通常...
SQL注入是一种常见的网络安全威胁,针对Web应用程序,尤其是那些依赖数据库存储和检索信息的系统。攻击者通过构造恶意的SQL查询,插入到用户输入字段中,从而控制或操纵数据库,获取敏感信息,甚至对数据进行修改。...