在 Netbeans 7.4 for PHP 上警告“不要直接访问 Superglobal $_ POST Array”

在使用 $_ POST$_GET$_ SERVER、 ... ... 时,我在 Netbeans 7.4 for PHP 上得到了这个消息警告。

不要直接访问 Superglobal $_ POST 数组

这是什么意思? 我能做些什么来改正这个警告?

编辑: 事件示例代码仍然显示此警告。

114614 次浏览

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 和 filter doc:

Http://www.php.net/manual/en/function.filter-input.php

Http://www.php.net/manual/en/filter.filters.php

我同意其他的回答,在大多数情况下(几乎总是)有必要清理您的输入。

但是考虑一下这样的代码(它是针对 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))