我有这样的代码:
ORDER BY $order
其中“$为了”从URL采取这样的:
http://mywebsite.com/page.php?order=Bananas DESC
可能有人用错误的意向,在末尾加上自己的代码的URL,从而做他们喜欢的任何事情?
我有这样的代码:
ORDER BY $order
其中“$为了”从URL采取这样的:
http://mywebsite.com/page.php?order=Bananas DESC
可能有人用错误的意向,在末尾加上自己的代码的URL,从而做他们喜欢的任何事情?
如果您不检查$order
变量上的内容,那么您的代码肯定会暴露给潜在的SQL注入攻击。
因此,您需要确保从GET
命令得到的内容实际上是有效的order by
子句(可以使用正则表达式)来清理输入变量。
或者你可以为你的应用程序做一些编码以形成按子句的顺序。喜欢的东西制作:
http://mywebsite.com/page.php?orderField=1&orderType=DESC
然后映射在你的代码1
到Bananas
为orderField
参数,ASC
或DESC
您orderType
参数。
可能是的。根据您的配置,攻击者可以插入这样的事情:
“香蕉;删除表生”
子查询,而不是多条语句可能可以过
我想无论是建立秩序条款自己,或将其与白名单进行比较。
例子:
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....
}
这个问题问得好。在这里你可以找到一个白名单示例代码http://stackoverflow.com/questions/2993027/in-php-when-submitting-strings-to-the-db-should-i-take-care-of-illegal-characters/ 2995163#2995163 – 2011-01-12 12:26:56