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

时间:2013-11-04 12:39:20

标签: php netbeans superglobals netbeans-7.4

我在Netbeans 7.4 for PHP上收到此消息警告,而我正在使用 $ _ POST $ _ GET $ _ SERVER , ....

  

不要直接访问Superglobal $ _POST数组

这是什么意思?我该怎么做才能纠正这个警告?

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

5 个答案:

答案 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和过滤器文档:

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

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

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