为什么感觉在实际的测试中ORDER BY注入的比例变高了

栏目: 数据库 · 发布时间: 7年前

内容简介:为什么感觉在实际的测试中ORDER BY注入的比例变高了

之前去阿里先知大会的时候, 在听greg.wu的议题的时候, 听到他提了一下他挖order by注入的比例占所有注入比例的20-30%(如果没记错的话)

为什么感觉在实际的测试中ORDER BY注入的比例变高了

自己在各种测试的过程中,发现的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 BY注入的比例变高了

为什么感觉在实际的测试中ORDER BY注入的比例变高了

如果order的参数不是实体类里的属性就直接报错了。

为什么感觉在实际的测试中ORDER BY注入的比例变高了

还有一种就是 用户传递进去的字符串, 给你强行加上 ` ,再对用户传递进来的字符串清掉 , 或者对`转义


以上所述就是小编给大家介绍的《为什么感觉在实际的测试中ORDER BY注入的比例变高了》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

锦绣蓝图

锦绣蓝图

[美] 沃德科 (Christina Wodtke)、[美] 戈夫拉 (Austin Govella) / 蔡芳 / 人民邮电出版社 / 2009-11-01 / 59.00

Web 2.0和社会化大趋势下,你的网站发展喜人,但是问题也接踵而来:信息变得越来越庞杂无序,业务流程愈加复杂,搜索和导航越来越难,用户对使用体验的要求也越来越高……怎么办? 作者非常通俗易懂地讲述了如何规划易用的网站及其背后的信息架构原理。首先介绍了建立信息架构的八项基本原则,然后重点强调了组织系统和元数据在信息架构中的作用,并指出设计搜索和导航需要考虑的问题和方法,另外还补充了当今热门的......一起来看看 《锦绣蓝图》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具