Предупреждение "не обращаться к массиву Superglobal $ POST напрямую" в Netbeans 7.4 для PHP

У меня есть это предупреждение сообщения на Netbeans 7.4 для PHP, пока я использую $_POST, где, переменная$_GET, переменная$_SERVER, ....

не получить доступ к массиву Superglobal $_POST напрямую

Что это значит? Что я могу сделать, чтобы исправить это предупреждение?

изменить: пример кода события по-прежнему показывает это предупреждение.

4 ответов


filter_input(INPUT_POST, 'var_name') вместо $_POST['var_name']
filter_input_array(INPUT_POST) вместо $_POST


хотя немного поздно, я столкнулся с этим вопросом при поиске решения для той же проблемы, поэтому я надеюсь, что это может помочь...

https://blogs.oracle.com/netbeansphp/entry/improve_your_code_with_new

причина, по которой он был добавлен, заключается в том, что суперглобалы обычно заполнены пользовательским вводом, которому никогда не следует слепо доверять. Вместо этого должна быть сделана какая-то фильтрация, и это то, что подсказывает подсказка. Отфильтруйте значение superglobal, если оно содержит отравленное содержимое.

например, где у меня было:

$_SERVER['SERVER_NAME']

Я поставил вместо:

filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)

у вас есть filter_input и фильтры 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);

N. B: применить ко всем другим супер глобальной переменной