我在Netbeans 7.4 for PHP上收到此消息警告,而我正在使用 $ _ POST , $ _ GET , $ _ SERVER , ....
不要直接访问Superglobal $ _POST数组
这是什么意思?我该怎么做才能纠正这个警告?
编辑:事件示例代码仍会显示此警告。
答案 0 :(得分:90)
filter_input(INPUT_POST, 'var_name')
而不是$_POST['var_name']
filter_input_array(INPUT_POST)
代替$_POST
答案 1 :(得分:83)
虽然有点晚,我在搜索同一问题的解决方案时遇到过这个问题,所以我希望它能有所帮助...
发现自己处于与你相同的黑暗中。刚刚发现这篇文章,它解释了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和过滤器文档:
答案 2 :(得分:6)
我同意其他答复者的意见,在大多数情况下(几乎总是),有必要对您的意见进行消毒。
但请考虑这样的代码(它是用于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();
}
在这里应用消毒不会非常有用(尽管它也不会破坏任何东西)。
所以,请遵循建议,但不要盲目 - 而要理解他们的原因:)
答案 3 :(得分:1)
只需使用
filter_input(INPUT_METHOD_NAME,' var_name')而不是$ _INPUT_METHOD_NAME [' var_name'] filter_input_array(INPUT_METHOD_NAME)而不是$ _INPUT_METHOD_NAME
e.g
$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);
N.B:适用于所有其他超级全局变量
答案 4 :(得分:1)
这是我的代码行的一部分,在NetBeans中提出了警告:
$page = (!empty($_GET['p']))
经过大量研究,并看到有无数种方法可以过滤此数组,我发现其中一个很简单。我的代码正常工作,NetBeans很高兴:
$p = filter_input(INPUT_GET, 'p');
$page = (!empty($p))