博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL或HQL预编译语句,可以防止SQL注入,可是不能处理%和_特殊字符
阅读量:6609 次
发布时间:2019-06-24

本文共 934 字,大约阅读时间需要 3 分钟。

近期项目在做整改,将全部DAO层的直接拼接SQL字符串的代码,转换成使用预编译语句的方式。个人通过写dao层的单元測试,有下面几点收获。

dao层代码例如以下

//使用了预编译sqlpublic List
selectConfigBySuffix(String suffix){ String hql = "from IndvConfigModel where configKey like '%'||?||'%'"; return this.selectConfigByHQL(hql, new Object[]{suffix});}

单元測试代码和运行结果例如以下:

@Testpublic void testLike(){    List
list = dao.selectConfigBySuffix("picQual"); Assert.assertEquals(list.size(), 2);// 1.true list = dao.selectConfigBySuffix("picQua%"); Assert.assertEquals(list.size(), 2);// 2.true list = dao.selectConfigBySuffix("pic'Qual"); Assert.assertEquals(list.size(), 0);//3. true}

1、第一个断言是true,说明上面的做法,的确可以起到模糊查询的效果 

 
2、第二个断言是true。说明%被觉得是模糊匹配,并没有被oracle看成普通的字符。这说明预编译语句。是不能处理參数值中的特殊字符的。遇到%和_这样的数据库模糊查询的特殊字符,须要使用者自己转义.
  
3、第三个断言没有报异常。说明:预编译语句已经对oracle的特殊字符单引號。进行了转义。即将单引號视为查询内容。而不是字符串的分界符。

 
因为SQL注入事实上就是借助于特殊字符单引號。生成or 1= 1这样的格式的sql。预编译已经对单引號进行了处理,所以能够防止SQL注入

转载地址:http://wiiso.baihongyu.com/

你可能感兴趣的文章
poj 3624
查看>>
Unable to make the session state request to the session state server处理方法
查看>>
图的遍历(Python实现)
查看>>
CSS 笔记——背景布局
查看>>
洛谷P1880 石子合并 [NOI1995]
查看>>
angular限制输入框整数和小数的指令
查看>>
www改变GUITexture的贴图
查看>>
Android 类似launcher左右滑动(实例二)
查看>>
【相机篇】从到FlyCapture2到Spinnaker
查看>>
[Leetcode]35. Search Insert Position
查看>>
sicily 1020 Big Integer
查看>>
原生ajax 请求
查看>>
关闭当前的子窗口,刷新父窗口,弹出层提示框
查看>>
Background agent
查看>>
buntu下连接远程Windows服务器
查看>>
注册、订单流程图
查看>>
js随机生成验证码及其颜色
查看>>
将某个目录下的 文件(字符窜) 只将数字过滤出来
查看>>
机器学习之常见机器学习算法---面试之常见机器学习算法简单思想梳理
查看>>
C# 委托和泛型
查看>>