12306曝光sql注入漏洞,我试着发布解决方案

简介:

12306曝光sql注入漏洞,我试着发布解决方案

在项目中,运用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 ?, ?
 

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




      本文转自yjflinchong 51CTO博客,原文链接:http://blog.51cto.com/yjflinchong/1165028,如需转载请自行联系原作者




相关文章
|
21天前
|
SQL 安全 网络安全
SQL安装程序规则错误解决方案
在安装SQL Server时,遇到安装程序规则错误是一个比较常见的问题
|
23天前
|
SQL 安全 Windows
SQL安装程序规则错误解析与解决方案
在安装SQL Server时,用户可能会遇到安装程序规则错误的问题,这些错误通常与系统配置、权限设置、依赖项缺失或版本不兼容等因素有关
|
2月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
109 5
|
19天前
|
SQL 运维 安全
怎样可以找到SQL漏洞:技巧与方法详解
SQL漏洞,特别是SQL注入漏洞,是Web应用中常见的安全威胁之一
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
58 5
|
2月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
97 1
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
44 1
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
38 3
|
23天前
|
SQL 安全 关系型数据库
SQL错误代码1303解析与解决方案:深入理解并应对权限问题
在数据库管理和开发过程中,遇到错误代码是常见的事情,每个错误代码都代表着一种特定的问题
|
25天前
|
SQL 数据库
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
137 0