不要直接访问Superglobal $ _REQUEST数组

时间:2016-07-18 13:32:30

标签: php netbeans sqlsrv superglobals

我一直在PHP中访问$ _REQUEST,如下所示:

//JS
xmlhttp.open("GET", "logic.php?q=" + itemOne  + "&w=" + itemTwo, true);

//PHP
$q = $_REQUEST['q'];
$w = $_REQUEST['w'];

通过get用于MSSQL服务器查询(SQLSRV)的项目。

我的问题是以不同方式/正确方式执行上述操作的最佳实践方法是什么?我在某处读到,这对于易受SQL注入攻击等而言并不好。

1 个答案:

答案 0 :(得分:1)

  

我的问题是做什么的最佳实践方法   不同/正确吗?

您提供的示例JavaScript使用了GET请求。 "正确"访问参数的方法是通过PHP的$_GET数组。使用$_REQUEST是一个坏习惯,因为你无法控制数据的到达方式。我给你一个简单的例子:

使用令牌基本身份验证的网站通常要求您将令牌作为POST数据发送。如果通过URL参数交换私人信息被认为是不安全的,那么从$_REQUEST获取数据的PHP脚本无法知道数据是如何到达的,并且会错误地接受错误发送的令牌。更好的脚本会在$_POST中查找令牌。如果不存在,则没有令牌;即使用户试图在网址中发送它。

  

我在某个地方读到,这对于易受伤害而言并不好   SQL注入攻击等。

SQL注入并不特别与$_REQUEST有关。无论何时直接在SQL查询中插入用户提交的数据,无论数据来自$_REQUEST$_GET,还是文件,都会发生这种情况......这种可怕的代码设计允许攻击者控制您的SQL并指示您的数据库执行他或她希望的任何命令(例如:泄露或删除您的数据)。为了保护自己免受攻击,请了解预备语句参数化查询