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


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

Не доступ к Суперглобальным массивом $_POST, где непосредственно

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

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

4 106

4 ответа:

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 и filters 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: применить ко всем другим супер глобальной переменной