`
q445862108
  • 浏览: 82934 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Ibatis sql注入 注意!!

    博客分类:
  • java
 
阅读更多
在项目中,运用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注入的网站的方法(必看)

    方法一:利用google高级搜索,比如搜索url如.asp?... 您可能感兴趣的文章:Java面试题解析之判断以及防止SQL注入SQL注入原理与解决方法代码示例通过ibatis解决sql注入问题Win2003服务器防SQL注入神器–D盾_IIS防火墙

    通过ibatis解决sql注入问题

    iBatis解决SQL注入问题 iBatis是一个流行的持久层框架,广泛应用于Java企业级开发中。然而,在使用iBatis时,开发人员经常面临着SQL注入问题。SQL注入是一种常见的安全威胁,可能会导致数据泄露、数据篡改、系统...

    iBATIS SQL Maps 开发指南

    2. 需要手动管理SQL语句,可能会引发SQL注入问题。 3. 与ORM框架相比,iBATIS的功能相对较少,例如缺少实体类的自动映射。 总的来说,iBATIS SQL Maps为Java开发提供了一种有效的数据库访问方案,通过学习和掌握其...

    ibatis动态注入

    iBATIS,作为一款优秀的持久层框架,提供了强大的动态SQL功能,解决了直接使用JDBC时编写复杂动态SQL的难题。本文将深入探讨iBATIS动态注入的相关知识点。 iBATIS动态SQL主要通过XML映射文件中的特定标签实现,允许...

    iBATIS SQL Maps官方中文教程.rar

    iBATIS SQL Maps官方中文教程是一份非常宝贵的资源,它为初学者和进阶开发者提供了深入理解iBATIS SQL Maps的途径。iBATIS是一个Java框架,它将应用程序的业务逻辑与数据库操作分离,简化了数据访问层的开发。SQL ...

    iBATIS-SqlMaps-2_cn.pdf

    在实际应用中,iBATIS SQL Maps常与其他Java框架(如Spring)集成,以实现更强大的功能,如AOP(面向切面编程)和依赖注入。同时,随着技术的发展,iBATIS已被MyBatis所取代,但其设计理念和核心思想在MyBatis中得以...

    iBATIS-SqlMaps

    虽然iBATIS 自带了完整的数据访问能力,但常常与Spring框架一起使用,以利用Spring的依赖注入和AOP(面向切面编程)特性。通过Spring的DataSourceTransactionManager和SqlSessionFactoryBean,可以轻松地将iBATIS ...

    ASP.NET MVC+iBatis+SQL

    3. **参数绑定**:在iBatis映射文件中,可以使用占位符绑定动态参数,实现SQL语句的参数化,提高安全性并防止SQL注入。 综上所述,这个项目演示了如何结合ASP.NET MVC、iBatis和SQL来构建一个简单的Web应用程序。...

    ibatis总结 ibatis ibatis ibatis ibatis

    例如,`select * from PRODUCT where PRD_CAT_ID = #{value}`中的`#{value}`是预编译参数,能有效防止SQL注入。 总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和...

    IBATIS SQL Maps 入门教程.pdf

    **IBatis SQL Maps 入门教程** 在Java Web开发领域,数据访问层的实现往往是一个重要的环节。Ibatis,作为一个轻量级的持久层框架,为开发者提供了灵活的SQL映射机制,使得数据库操作变得更加简单。这篇入门教程将...

    ibatis常用的sql

    其中`#value#`表示传入的实际参数值,通过这种方式实现了SQL语句的参数化,避免了SQL注入等安全问题。 ### 二、插入操作 接下来是第二条SQL语句: ```xml parameterClass=...

    iBATIS SQL Maps

    iBATIS SQL Maps是早期Java开发中广泛使用的持久层框架,它允许开发者将SQL语句直接集成到XML配置文件中,实现数据访问层与业务逻辑层的解耦。本教程将深入探讨iBATIS的核心概念、功能以及如何在实际项目中有效应用...

    iBATIS-SqlMaps中文教程集合

    - Spring与iBATIS整合:讲解如何将iBATIS与Spring框架集成,实现依赖注入和事务管理。 - 性能优化:提供性能调优的策略,包括缓存使用、批处理等技巧。 这四本教程全面覆盖了iBATIS的核心概念和实践应用,无论你...

    iBATIS-SqlMaps-2_cn.rar_ibatis/spring

    《iBATIS-SqlMaps-2_cn.rar》是一款关于iBATIS框架的中文教程资源,主要针对想要深入了解和使用iBATIS与Spring集成的初学者。这个压缩包包含了一个PDF文档,即《iBATIS-SqlMaps-2_cn.pdf》,它是iBATIS SQL Maps 2的...

    ibatis api 帮助文档+IBATIS 开发文档

    PreparedStatement支持预编译,提高性能并防止SQL注入;SimpleStatement则用于简单的SQL执行。 3. **ParameterMap**和**ParameterValuePair**:用于传递SQL查询参数。ParameterMap定义了参数和它们的映射关系,...

    ibatis demo,ibatis例子,ibatis示例

    在ibatis demo中,我们可能还会看到如何配置Spring与Ibatis的集成,以便利用Spring的依赖注入和事务管理能力。这通常涉及`SqlSessionFactoryBean`的配置以及Mapper接口的扫描和装配。 通过这个demo,你可以了解到...

    ibatis拼接字符串

    尽管手动拼接 SQL 字符串是一种简单有效的方法,但在实际项目中还应注意以下几点: 1. **安全性**:使用预编译语句(PreparedStatement)来避免 SQL 注入等问题。 2. **性能优化**:对于频繁执行的 SQL 语句,可以...

    springMVC和ibatis实现sql2005数据库插入案例

    接下来,iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,允许开发者更加灵活地控制SQL执行。iBatis可以方便地集成到Spring中,形成一个强大的数据访问解决方案。 在SQL Server 2005中,数据插入通常...

    Web应用安全:SQL注入的辅助性对策.pptx

    SQL注入是一种常见的网络安全威胁,针对Web应用程序,尤其是那些依赖数据库存储和检索信息的系统。攻击者通过构造恶意的SQL查询,插入到用户输入字段中,从而控制或操纵数据库,获取敏感信息,甚至对数据进行修改。...

Global site tag (gtag.js) - Google Analytics