119

当我使用$_POST$_GET$_SERVER时,我在 Netbeans 7.4 for PHP 上收到了这条消息警告。

不要直接访问超全局 $_POST 数组

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

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

4

5 回答 5

98

filter_input(INPUT_POST, 'var_name')代替$_POST['var_name']
filter_input_array(INPUT_POST)代替$_POST

于 2013-11-09T10:15:50.180 回答
93

虽然有点晚了,但我在寻找相同问题的解决方案时遇到了这个问题,所以我希望它可以提供任何帮助......

发现自己和你一样处于黑暗中。刚刚找到这篇文章,它解释了 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 文档:

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

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

于 2014-06-23T17:09:42.340 回答
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();
}

在这里应用消毒不是很有用(尽管它也不会破坏任何东西)。

因此,请遵循建议,但不要盲目 - 了解它们的用途:)

于 2015-05-06T11:04:17.817 回答
3

只需使用

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

注意:适用于所有其他超级全局变量

于 2018-05-01T15:42:09.597 回答
2

这是我的代码中的一部分,它在 NetBeans 中引发了警告:

$page = (!empty($_GET['p'])) 

经过大量研究并看到有无数种方法可以过滤这个数组后,我发现了一种很简单的方法。我的代码有效,NetBeans 很高兴:

$p = filter_input(INPUT_GET, 'p');
$page = (!empty($p))
于 2020-06-14T20:38:50.263 回答