用友软件首页

理解Like查询语句SQL注入 有效防范黑客入侵

2016-1-23 0:0:0 wondial

理解Like查询语句SQL注入 有效防范黑客入侵

理解Like查询语句SQL注入 有效防范黑客入侵 看《ibatis in action》,里面提到了使用like进行模糊查询的时候,会有注入漏洞。举例说明如下:
 
Xml代码 

<select id="getSchoolByName" resultMap="result">      select            *      from tbl_school      where school_name like '%
name
%' </select>

Java代码 

 

public List<School> getSchoolByName(String name) throws DataAccessException {       List<School> list = (List<School>)getSqlMapClientTemplate().queryForList("getSchoolByName",name);       return list;   }  

测试用例:
 
Java代码 
 

@Test  public void print(){          try{              List<School> list = schoolDao.getSchoolByName("长乐一中%' or '1%' = '1");              for(School school : list){                  System.out.println(school.getName());              }          }catch(Exception e){              e.printStackTrace();          }      }  

    用p6spy查看最后生成的sql语句:
 
 
 
Sql代码 
 
sql1:select  * from tbl_school where school_name like '%长乐一中%' or '1%' = '1%'    
 
 
 
sql2:select  * from tbl_school where school_name like '%长乐一中%' or '1%' = '1%' 
 
     其中:sql1是ibatis放入preparedstatement执行的sql,sql2是jdbc执行的真正sql,在这个例子里二者一样的,因为在map里使用的占位符是
name
,ibatis遇到这样的占位符,就直接拼sql语句了,而不是用在sql中使用占位符再给sql set paramter(用#name#的话就是,但是不能用来搞模糊查询)。
 
 
 
    在实际项目中的后果就是:如果在页面上有个输入框,让用户输入学校名字,用户输入 长乐一中%' or '1%' = '1 的字样,那程序就会把所有的学校结果都列出来。实际上可能有一些学校已经被删除掉了(使用某个字段标记,假删除),不想让用户再看到或者某些学校信息当前用户没有权限看到。
 
 
 
    在《ibatis in action》里,例举了这个注入漏洞一个更可怕的后果,删表。修改测试用例如下:
 
Java代码 
 

@Test      public void print(){           try{               List<School> list = schoolDao.getSchoolByName("长乐一中';drop table tbl_test;#");               for(School school : list){                   System.out.println(school.getName());               }           }catch(Exception e){               e.printStackTrace();           }       }  

    用p6spy查看最后生成的sql语句:
 
Sql代码 
 
select * from tbl_school where school_name like '%长乐一中';drop table tbl_test;#%' 
 
select * from tbl_school where school_name like '%长乐一中';drop table tbl_test;#%'  
 
    在mysql中,#是注释符.复制以下sql代码在phpmyadmin中执行,tbl_test确实被删掉了。但是用ibatis执行这句sql却失败,debug了下ibatis的源代码,发现ibatis是用preparedstatement执行查询的。上面的是两个sql语句,但ibatis直接把“select * from tbl_school where school_name like '%长乐一中';drop table tbl_test;#%'”这句sql放进去执行,差不多下面这样: www.it165.net
 
Java代码 
 
String sql = "select * from tbl_school where school_name like '%长乐一中';drop table tbl_test;#%'" 
 
 
 
PreparedStatement ps = conn.prepareStatement(sql); 
 
 
 
ps.execute(); 
 
    这样的执行就会报错,也就删除不了tbl_test这张表了。。。奇怪了。。难道《ibatis in action》这书上讲错了?
 
    以上代码都是在ibatis2.3.4的环境下测试的。没试过以前的版本。。
 
 
 
    但是在使用ibatis的时候难道就不能like查询了?或者要在web层或者service层对用户的输入条件作一次过滤么?太麻烦了。还好ibatis提供的另一种占位符#在用PreparedStatement执行查询的时候,是用?作占位符,然后set paramter的。。把map里的sql语句改成这样吧:(参考了网上的sql语句)
 
Sql代码 
 
mysql: select * from tbl_school where school_name like concat('%',#name#,'%') 
 
oracle: select * from tbl_school where school_name like '%'||#name#||'%' 
 
SQL Server:select * from tbl_school where school_name like '%'+#name#+'%'
 


如果您的问题还没有解决,可以到 T+搜索>>上找一下答案

分享到:

微博关注

bj用友软件

最新信息

爱德华·布洛克写的《战略成本管理(第2版)》是否有配套答案?

爱德华·布洛克写的《战略成本管理(第2版)》是否有配套答案? 爱德华·布洛克写的《战略成本管理(第2版)》是否有配套答案?目前我在读《战略成本管理》这本书,书写得挺通俗易懂的,但是书本除了自学题的部分有答案之外,问答题还有练习题部分,书本上是没有相关答案的,大家知道这本书是有配套的答案册子的吗?

财政补助的就诊病人的检查费改如何记账

财政补助的就诊病人的检查费改如何记账 财政补助的就诊病人的检查费改如何记账医院收到财政补助为就诊病人办卡,就诊病人凭卡就诊检查拿药不付费,病人就诊时药品和检查在补助项目中如何列支记账,收到补助时该如何记账,

热点文章

新闻资讯

  • 【新年首签】天津用友&通广集团签署战略协议

    【新年首签】天津用友&通广集团签署战略协议

    天津用友软件技术有限公司(以下简称天津用友)和天津通信广播集团有限公司(以下简称通广集团)就企业信息化建设事宜进行战略签约。

    参加此次会议有天津用友总经理赵永春,天津用友副总经理王成岩、通广集团副总经理马严、通广集团科技质量部部长尹刚、七一二公司技术质量部部长门国梁、七一二公司技术中心主任黄建尧等。

    image

  • 会计职场堪比宫斗剧

    会计职场堪比宫斗剧

     近几年,各种宫斗剧火爆,《甄嬛传》《芈月传》等等都脍炙人口,许多人经常打趣自己像某个人物,若是在古代能活到第几集。让人不禁想起,会计职场又何尝不是一场宫斗,每天要察言观色,明了领导的内心,就像后宫谁也不敢惹皇后一样。但当你坐上领导位置的时候,盯着你的眼睛就会很多,稍有不慎就会被取代。就像后宫的嫔妃一样,就算坐上了皇后的位置也要时刻担心有没有人觊觎。

    image

知 识 库

  • 12.1用友 备份

    12.1用友 备份

    12.1用友 备份

    用友软件提供两种备份方式:手工备份和自动备份,下面我们讲解这两种方式的备份账套数据操作步骤(T6和U8与T3备份恢复方法相同,此处以T3为例):

    ㈠、手工备份

    1、先在硬盘上建立一个空文件夹

    打开我的电脑(双击)D(或E、F)盘,(空白处右击右键)新建文件夹,把这个新建的文件夹,改名为如用友数据手工备份。(双击)打开用友数据手工备份,(右击)出现新建文件夹,把所新建的文件夹改名为当天的备份日期如2016-12-16后退出

  • 12.1用友不能自动备份

    12.1用友不能自动备份

    12.1用友不能自动备份

    用友软件提供两种备份方式:手工备份和自动备份,下面我们讲解这两种方式的备份账套数据操作步骤(T6和U8与T3备份恢复方法相同,此处以T3为例):

    ㈠、手工备份

    1、先在硬盘上建立一个空文件夹

    打开我的电脑(双击)D(或E、F)盘,(空白处右击右键)新建文件夹,把这个新建的文件夹,改名为如用友数据手工备份。(双击)打开用友数据手工备份,(右击)出现新建文件夹,把所新建的文件夹改名为当天的备份日期如2016-12-16后退出

  • 最新文章排行
  • 热门文章排行

管理软件

  • T3卸载就会跳到安装界面去,用360工具也卸载不了。请问这种情况哪位老师遇见过,我们应该如何处理。谢谢、在线等。

    T3卸载就会跳到安装界面去,用360工具也卸载不了。请问这种情况哪位老师遇见过,我们应该如何处理。谢谢、在线等。

    T3卸载就会跳到安装界面去,用360工具也卸载不了。请问这种情况哪位老师遇见过,我们应该如何处理。谢谢、在线等。 T3卸载就会跳到安装界面去,用360工具也卸载不了。请问这种情况哪位老师遇见过,我们应该如何处理。谢谢、在线等。[]

    备份好账套,这种情况只能强制删除了,请备份好账套之后,停止数据库服务和T3产品服务,自动备份服务;然后删除T3安装路径以及C盘下ufcomsql文件夹,然后使用360清除无用注册表,最后重启电脑即可;

  • #东营同城会#东营会计电算化是考用友还是金蝶?

    #东营同城会#东营会计电算化是考用友还是金蝶?

    #东营同城会#东营会计电算化是考用友还是金蝶? #东营同城会#东营会计电算化是考用友还是金蝶?[]

    不是用友
    全国统一的
    类似于用友
    @宝怡妈妈:谢谢
    @宝怡妈妈:备考的话参考用友就可以是吗?
    @归去来兮1438652473: 我朋友也考,只能用用友参考了吧
    可以打电话到8203555,8083111,这是用友软件在东营地区的代理商,有免费的软件应用培训,还可以领取小礼物

关于我们 | 公司动态 | 获奖记录 | 联系我们 | 招聘信息 | 用友产品中心 | 用友云基地
Copyright ©  www.kuaiji66.com  All Rights Reserved 天龙瑞德
京ICP备11046295号-1 技术支持 北京天龙瑞德信息技术有限责任公司   北京海淀上地十街辉煌国际大厦3号楼6层 总机:010-59798025   售后:4009908488
北京天龙瑞德信息技术有限责任公司