当我使用 $_POST、$_GET、$_SERVER、.... 时,我在 Netbeans 7.4 PHP 版上收到了这条警告信息。
不要直接访问超全局 $_POST 数组
这是什么意思?怎样才能纠正这个警告?
编辑: 事件示例代码仍显示此警告。
用 filter_input(INPUT_POST, 'var_name')
代替 $_POST['var_name']
<br/>;
用 filter_input_array(INPUT_POST)
代替 `$_POST
虽然有点晚了,但我在搜索相同问题的解决方案时遇到了这个问题,希望能对您有所帮助...
我发现自己陷入了和你一样的困境。我刚刚找到了这篇文章,其中解释了 NetBeans 7.4 中引入的一些新提示,包括这一条:
https://blogs.oracle.com/netbeansphp/entry/improve_your_code_with_new
添加该提示的原因是,超全局变量通常都是用户输入的内容,不应该盲目相信这些内容。相反,应该进行某种过滤,而这正是提示所建议的。对超全局值进行过滤,以防其包含中毒内容。
例如,我有
$_SERVER['SERVER_NAME']
我改成了
filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)
这里有 filter_input 和 filters 文档:
我同意其他回答者的观点,在大多数情况下(几乎总是),有必要对您的输入进行消毒。
但考虑一下这样的代码(它是用于 REST 控制器的):
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
return $this->doGet($request, $object);
case 'POST':
return $this->doPost($request, $object);
case 'PUT':
return $this->doPut($request, $object);
case 'DELETE':
return $this->doDelete($request, $object);
default:
return $this->onBadRequest();
}
在这里应用 sanitizing 并没有什么用(虽然也不会破坏任何东西)。
因此,请遵循建议,但不要盲目--而是要理解为什么要这样做:)