sql注入测试(3)---现象分析
那为什么出现以上问题呢?这是程序代码层控制不当导致的。如果web前端对输入数据控制严格,会对数据库进行操作的字符串,在客户端做敏感字符转义处理,或者在操作数据库的dao层,使用动态参数的sql,不使用拼接方式的sql,都可以防止该类问题的发生。
一般情况,如果测试人员了解dao层的具体设计,如果使用的就是非拼接方式的,基本是可以拦截大部分这些存在问题的sql了。而如果使用的是拼接方式,就可以好好的设计测试用例,进行测试了。
那又为什么非拼接方式就可以有效的防止SQL注入测试呢?
修改上部分核心代码块,采用动态sql(预编译sql方式):
String hql="delete from Department where name=?";
Query query = session.createQuery(hql);
query.setString(0, name);
同样输入的代码存在问题:
可是结果却没有删除。为什么呢?
因为在setString方法中实现了对字符串中敏感字符的转义。Jdk提供PreparedStatemen接口,在mysql的jar包中,PreparedStatement实现了jdk中的PreparedStatement,里面的setString方法如下:
- public void setString(int parameterIndex, String x) throws SQLException {
- // if the passed string is null, then set this column to null
- if (x == null) {
- setNull(parameterIndex, Types.CHAR);
- } else {
- StringBuffer buf = new StringBuffer((int) (x.length() * 1.1));
- buf.append('\'');
- int stringLength = x.length();
- //
- // Note: buf.append(char) is _faster_ than
- // appending in blocks, because the block
- // append requires a System.arraycopy()....
- // go figure...
- //
- for (int i = 0; i < stringLength; ++i) {
- char c = x.charAt(i);
- switch (c) {
- case 0: /* Must be escaped for 'mysql' */
- buf.append('\\');
- buf.append('0');
- break;
- case '\n': /* Must be escaped for logs */
- buf.append('\\');
- buf.append('n');
- break;
- case '\r':
- buf.append('\\');
- buf.append('r');
- break;
- case '\\':
- buf.append('\\');
- buf.append('\\');
- break;
- case '\'':
- buf.append('\\');
- buf.append('\'');
- break;
- case '"': /* Better safe than sorry */
- if (this.usingAnsiMode) {
- buf.append('\\');
- }
- buf.append('"');
- break;
- case '\032': /* This gives problems on Win32 */
- buf.append('\\');
- buf.append('Z');
- break;
- default:
- buf.append(c);
- }
- }
- buf.append('\'');
- String parameterAsString = buf.toString();
- byte[] parameterAsBytes = null;
- if (!this.isLoadDataQuery) {
- parameterAsBytes = StringUtils.getBytes(parameterAsString,
- this.charConverter, this.charEncoding, this.connection
- .getServerCharacterEncoding(), this.connection
- .parserKnowsUnicode());
- } else {
- // Send with platform character encoding
- parameterAsBytes = parameterAsString.getBytes();
- }
- setInternal(parameterIndex, parameterAsBytes);
- }
- }
Hql进行动态参数绑定也存在很多种其他方法:按参数名称绑定,按参数位置绑定, setParameter()方法等等。http://baike.baidu.com/link?url=NKt6I-Gk0HnyFRWyZ0_ZuDe0pz_aDqVul-VDJZCDCGl9K5LsBghBfxhPVJmZh9qmBKtXgY2EqAqK1oQUNK2Su_
sql注入测试(3)---现象分析的更多相关文章
- java web sql注入测试(3)---现象分析
那为什么出现以上问题呢?这是程序代码层控制不当导致的.如果web前端对输入数据控制严格,会对数据库进行操作的字符串,在客户端做敏感字符转义处理,或者在操作数据库的dao层,使用动态参数的sql,不使用 ...
- java web sql注入测试(1)---概念概述
在进行java web 测试时,经常会忽略的测试种类就是sql注入测试,这类缺陷造成的原因是开发技术在这方面欠缺的表现,虽然不常见,但一旦有这类缺陷,就很因此对运营的数据造成很多不必要的损失,所以,还 ...
- SQL注入测试平台 SQLol -1. 简介与安装
最近下载了SQLol测试了一下,感觉挺好玩的,做一下记录. SQLol是一个可配置得SQL注入测试平台,它包含了一系列的挑战任务,让你在挑战中测试和学习SQL注入语句,SQLol还是比较有创意的项目. ...
- sql注入测试(1)---概念概述
在进行java web 测试时,经常会忽略的测试种类就是sql注入测试,这类缺陷造成的原因是开发技术在这方面欠缺的表现,虽然不常见,但一旦有这类缺陷,就很因此对运营的数据造成很多不必要的损失,所以,还 ...
- SQL注入原理及代码分析(二)
前言 上一篇文章中,对union注入.报错注入.布尔盲注等进行了分析,接下来这篇文章,会对堆叠注入.宽字节注入.cookie注入等进行分析.第一篇文章地址:SQL注入原理及代码分析(一) 如果想要了解 ...
- SQL注入测试平台 SQLol -2.SELECT注入测试
前面,我们已经安装好了SQLol,打开http://localhost/sql/,首先跳转到http://localhost/sql/select.php,我们先从select模块进行测试. 一条完成 ...
- Sql注入测试--Sqlmap
慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...
- 通过BurpSuite和sqlmap配合对dvwa进行sql注入测试和用户名密码暴力破解
0x1 工具和环境介绍 dvwa:渗透测试环境 BurpSuite:强大的WEB安全测试工具 sqlmap:强大的sql注入工具 以上工具和环境都在kali linux上安装和配置. 0x2 步骤说明 ...
- SQL注入原理及代码分析(一)
前言 我们都知道,学安全,懂SQL注入是重中之重,因为即使是现在SQL注入漏洞依然存在,只是相对于之前现在挖SQL注入变的困难了.而且知识点比较多,所以在这里总结一下.通过构造有缺陷的代码,来理解常见 ...
随机推荐
- SDK/JDK,Shell/Shell脚本,Apache/APR ,MTK
SDK 软件开发工具包(SoftwareDevelopmentKit) API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用 ...
- win10 合并磁盘 disk Acronis Disk Director
硬盘调整C盘大小的工具.zip 无损分区软件(Acronis Disk Director)下载 11.0 破解版 ADD11H_trial_en-US(11.0.0.2343).exe 注册码: E ...
- cv相关博客文章
收藏些图像处理,机器学习,深度学习方面比较不错的文章,时常学习,复习和膜拜吧... 图像方面(传统CV): 1. SIFT特征 https://www.cnblogs.com/wangguchangq ...
- JMeter_控制器执行效果_给自己挖过的坑
线程及循环设置: 数据文件中放在“循环控制器”中的执行效果:每条数据执行5次,取够50条数据时停止 简单逻辑控制器按下面的目录创建后,执行结果效果同上面循环控制器的执行效果 本来想规整下目录结构,结果 ...
- Borg、Omega和Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训 原创: 韩佳瑶 译 Docker 2016-03-23Borg、Omega和Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训 原创: 韩佳瑶 译 Docker 2016-03-23
Borg.Omega和Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训 原创: 韩佳瑶 译 Docker 2016-03-23
- SEQ!org.apache.hadoop.io.LongWritable
[uhadoop@10-13-109-236 subdir26]$ $HADOOP_HOME/bin/hadoop fs -cat /data/flumeEvents/FlumeData.155980 ...
- keras Model 2 多输入和输出
1 入门 2 多个输入和输出 3 共享层 函数式模型有一个很好用的应用实例是:编写拥有多个输入和输出的模型.函数式模型使得在复杂网络中操作巨大的数据流变的简单. 我们实现下面这样的模型 from ke ...
- 目标检测中的选择性搜索-selective search-没弄
https://blog.csdn.net/small_munich/article/details/79595257 https://www.cnblogs.com/zyly/p/9259392.h ...
- Qt编写控件属性设计器8-网络采集
一.前言 上一篇文章已经打通了数据源之一的串口采集,这次要说的是网络采集,网络通信目前用的最多的是三种,TCP/UDP/HTTP,其中tcp通信又包括了客户端服务端两种,tcp通信才用了多次握手机制不 ...
- Apache配置优化一(查看当前apache数据)
1.查看当前的运行模块 httpd -l 2.查看httpd进程数 ps -ef | grep httpd | wc -l 3.查看请求80服务的client ip按照连接数排序 netstat -n ...