警告 “不要直接访问 Superglobal $_POST 数组” 在 Netbeans 7.4 for PHP 上


Warning "Do not Access Superglobal $_POST Array Directly" on Netbeans 7.4 for PHP

我在 Netbeans 7.4 for PHP 上收到此消息警告,而我使用的是 $_POST、$_GET$_SERVER 美元......

不要直接访问超全局 $_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和过滤器文档:

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))