Php 按$ORDER订购-可能存在安全漏洞?

Php 按$ORDER订购-可能存在安全漏洞?,php,security,url,Php,Security,Url,我有这样一个代码: ORDER BY $order 其中“$order”取自url,如: 描述 可能有人出于错误的目的在URL的末尾添加自己的代码,从而执行他们喜欢的任何操作吗?如果您不检查$order变量上的内容,那么您的代码肯定会受到潜在的SQL注入攻击 因此,您需要清理输入变量,方法是确保从get命令获得的内容实际上是一个有效的orderby子句,您可以使用正则表达式 或者,您可以对应用程序进行某种编码,以形成ORDERBY子句。比如制作: http://mywebsite.com/pa

我有这样一个代码:

ORDER BY $order
其中“$order”取自url,如:

描述


可能有人出于错误的目的在URL的末尾添加自己的代码,从而执行他们喜欢的任何操作吗?

如果您不检查$order变量上的内容,那么您的代码肯定会受到潜在的SQL注入攻击

因此,您需要清理输入变量,方法是确保从get命令获得的内容实际上是一个有效的orderby子句,您可以使用正则表达式

或者,您可以对应用程序进行某种编码,以形成ORDERBY子句。比如制作:

http://mywebsite.com/page.php?orderField=1&orderType=DESC

然后将代码1中的orderField参数映射为Banana,orderType参数映射为ASC或DESC。

如果不检查$order变量上的内容,那么代码肯定会受到潜在的SQL注入攻击

因此,您需要清理输入变量,方法是确保从get命令获得的内容实际上是一个有效的orderby子句,您可以使用正则表达式

或者,您可以对应用程序进行某种编码,以形成ORDERBY子句。比如制作:

http://mywebsite.com/page.php?orderField=1&orderType=DESC

然后将代码1中的orderField参数映射为Banana,orderType参数映射为ASC或DESC。

可能是。根据您的配置,攻击者可以插入如下内容:

ORDER BY $order
香蕉;投球台学生

也可以使用子查询而不是多个语句


我要么自己构建order子句,要么将其与白名单进行比较。

可能是的。根据您的配置,攻击者可以插入如下内容:

ORDER BY $order
香蕉;投球台学生

也可以使用子查询而不是多个语句

我要么自己构建order子句,要么将其与白名单进行比较。

示例:

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....
}
例如:

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....
}

我所做的唯一检查是查看订单字段是否为空以分配默认订单。我没有别的东西了。我将如何检查和防止攻击?我有9个可能的“顺序”应该被允许。@Michael-因此你有一个白名单,这是验证输入的正确方法。只需检查最后的变量是否在9个允许的字段中。工作完成了!那我就去试一试。干杯,伙计们,我被你们在这里得到答案的速度吓坏了。我正在做的唯一检查是查看订单字段是否为空,以分配默认订单。我没有别的东西了。我将如何检查和防止攻击?我有9个可能的“顺序”应该被允许。@Michael-因此你有一个白名单,这是验证输入的正确方法。只需检查最后的变量是否在9个允许的字段中。工作完成了!那我就去试一试。干杯,伙计们,你们这么快就能得到答案,我被吓坏了。问得好。在这里您可以找到一个白名单示例代码好问题。在这里,您可以找到一个白名单示例代码。值得注意的是,在末尾添加第二个查询时,查询堆栈的漏洞确实取决于所使用的DBMS和DB语言库的组合。某些组合从本质上来说是安全的,而某些组合则不是。值得注意的是,在末尾添加第二个查询的查询堆栈漏洞确实取决于所使用的DBMS和DB语言库的组合。有些组合从本质上来说是安全的,而有些组合则不是。