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

У меня есть предупреждение этого сообщения о Netbeans 7.4 для PHP, в то время как я использую $_ POST, $_ GET, $_ СЕРВЕР....

Не удается напрямую получить суперглобальный массив $_POST

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

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

Ответ 1

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

Ответ 2

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

Нашел себя в той же темноте, что и ты. Просто нашел эту статью, в которой объясняются некоторые новые намеки, введенные в 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 и фильтр doc:

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

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

Ответ 3

Я согласен с другими респондентами в том, что в большинстве случаев (почти всегда) необходимо дезинформировать ваш вход.

Но рассмотрите такой код (это для контроллера 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();
}

Было бы нецелесообразно применять санитарию здесь (хотя это и не сломало бы ничего).

Итак, следуйте рекомендациям, но не слепо - скорее поймите, для чего они предназначены:)