当我使用$_POST、$_GET、$_SERVER时,我在 Netbeans 7.4 for PHP 上收到了这条消息警告。
不要直接访问超全局 $_POST 数组
这是什么意思?我能做些什么来纠正这个警告?
编辑:事件示例代码仍然显示此警告。
当我使用$_POST、$_GET、$_SERVER时,我在 Netbeans 7.4 for PHP 上收到了这条消息警告。
不要直接访问超全局 $_POST 数组
这是什么意思?我能做些什么来纠正这个警告?
编辑:事件示例代码仍然显示此警告。
filter_input(INPUT_POST, 'var_name')
代替$_POST['var_name']
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();
}
在这里应用消毒不是很有用(尽管它也不会破坏任何东西)。
因此,请遵循建议,但不要盲目 - 了解它们的用途:)
只需使用
filter_input(INPUT_METHOD_NAME, 'var_name')
代替$_INPUT_METHOD_NAME['var_name']
filter_input_array(INPUT_METHOD_NAME)
代替$_INPUT_METHOD_NAME
例如
$host= filter_input(INPUT_SERVER, 'HTTP_HOST');
echo $host;
代替
$host= $_SERVER['HTTP_HOST'];
echo $host;
并使用
var_dump(filter_input_array(INPUT_SERVER));
代替
var_dump($_SERVER);
注意:适用于所有其他超级全局变量
这是我的代码中的一部分,它在 NetBeans 中引发了警告:
$page = (!empty($_GET['p']))
经过大量研究并看到有无数种方法可以过滤这个数组后,我发现了一种很简单的方法。我的代码有效,NetBeans 很高兴:
$p = filter_input(INPUT_GET, 'p');
$page = (!empty($p))