在 Netbeans 7.4 for PHP 上警告 "不要直接访问超全局 $_POST 数组"。

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

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

这是什么意思?怎样才能纠正这个警告?

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

解决办法

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

评论(12)

虽然有点晚了,但我在搜索相同问题的解决方案时遇到了这个问题,希望能对您有所帮助...

我发现自己陷入了和你一样的困境。我刚刚找到了这篇文章,其中解释了 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

评论(1)

我同意其他回答者的观点,在大多数情况下(几乎总是),有必要对您的输入进行消毒。

但考虑一下这样的代码(它是用于 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();
}

在这里应用 sanitizing 并没有什么用(虽然也不会破坏任何东西)。

因此,请遵循建议,但不要盲目--而是要理解为什么要这样做:)

评论(0)