我有这样的代码:
ORDER BY $order
其中'$ order'取自网址,如:
http://mywebsite.com/page.php?order=Bananas DESC
有意图的人是否可以在网址末尾添加自己的代码,从而做任何他们喜欢的事情?
答案 0 :(得分:2)
如果你不检查$order
变量上的内容,那么你的代码肯定会受到潜在的SQL注入攻击。
因此,您需要通过确保从GET
命令获得的内容实际上是一个有效的order by
子句来清理输入变量(您可以使用正则表达式)。
或者您可以为您的应用程序执行某种编码以通过子句形成订单。像制作一样:
http://mywebsite.com/page.php?orderField=1&orderType=DESC
然后将代码1
映射到Bananas
orderField
参数,将ASC
或DESC
映射到orderType
参数。< / p>
答案 1 :(得分:2)
可能是的。根据您的配置,攻击者可以插入以下内容:
“香蕉;放桌学生”
也可能是子查询而不是多个语句
我要么自己构建订单条款,要么将其与白名单进行比较。
答案 2 :(得分:0)
示例:
SELECT * FROM bugs ORDER BY $column $direction
您必须定义可能的选项:
$column =array('id','name',....);
$direction = array('ASC','DESC');
然后:
if(array_key_exists ($_REQUEST['column'],$column){
$column = $column[ $_REQUEST['column'] ];
}else{
...defaults....
}