内容简介:为什么感觉在实际的测试中ORDER BY注入的比例变高了
之前去阿里先知大会的时候, 在听greg.wu的议题的时候, 听到他提了一下他挖order by注入的比例占所有注入比例的20-30%(如果没记错的话)
自己在各种测试的过程中,发现的order by注入也确实不少, 每次看到order,sort之类的参数都会有点小兴奋。
那为什么在现在 sql 注入越来越少的情况下,order by注入的比例还不低呢。
我感觉是因为常见的查询,直接自己预编译或者用框架里的一些方法就能防止掉注入。
但是order by time这种 排序 是不能通过直接预编译来搞的,
因为如果直接像 java 里的preparestement来预编译,
order by ?, setString(1,”time”);
最后的sql语句就变成了order by “time”, 对一个字符串排序是没有效果的,所以一些人就又直接把order拼接之类的导致了注入。
而且order by 这种排序在程序中却用得不少, 因为有时候要根据用户的要求来排序, 就像网上商城那种即可以用销量来对商品进行排序,也可以用价格之类的来排序, 这时候就得根据用户传递进来的值来进行相应的排序.
那么一般是如何来防止ORDER BY注入的呢。
如果不利用框架来防止的话,我见过比较常用的两种是
1:从数据库中查询出来要排序的表中的所有列, 或者就是指定的几个列名,如果用户传递的sort变量不在允许的范围内的话,再把sort变量重置一下。
$sort = $_GET['sort']; if(!in_array($sort,array('time','price'))){ $sort = 'time'; }
2:还见得比较多的一种就是用户直接传的是数字, 不过以下这种写法,千万别忘啦default,没default的话,又注入咯。
$sort = $_GET['sort']; switch($sort){ case 1: $sort = 'time'; break; case 2: $sort = 'price'; break; default: $sort = 'time'; break; }
至于框架对于order by的防御, 有一些框架有防御, 部分没有。
我见过的两种框架防御order by注入的
一种是判断用户传递的是不是实体类的属性(hibernate),
如果order的参数不是实体类里的属性就直接报错了。
还有一种就是 用户传递进去的字符串, 给你强行加上 `
,再对用户传递进来的字符串清掉 , 或者对`转义
。
以上所述就是小编给大家介绍的《为什么感觉在实际的测试中ORDER BY注入的比例变高了》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- R语言-Cox比例风险模型
- CSS题目系列(2) - 实现一个固定比例盒子
- 一种基于群体特征的比例偏差纠正方案
- XImageView-RatioImageView按比例展示ImageView
- Android开发 - 掌握ConstraintLayout(十)按比例设置视图大小
- 2019 大裁员!年关将至,最高裁员比例竟达 90%?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
产品经理的第二本书
[美] 哥乔斯 / 戴维侬 / 中国财政经济出版社 / 2004-4 / 39.80元
产品经理的第二本书:产品经理实战技巧指南,ISBN:9787500570950,作者:(美)琳达·哥乔斯(Linda Gorchels)著;戴维侬译;戴维侬译一起来看看 《产品经理的第二本书》 这本书的介绍吧!