Предупреждение" не обращаться к массиву Superglobal $ POST напрямую " в Netbeans 7.4 для PHP
У меня есть это сообщение предупреждение на Netbeans 7.4 для PHP, пока я использую $_POST, где,переменная$_GET,переменная$_SERVER, ....
Не доступ к Суперглобальным массивом $_POST, где непосредственно
Что это значит? Что я могу сделать, чтобы исправить это предупреждение?
Edit: пример кода события по-прежнему показывает это предупреждение.
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 здесь:
Я согласен с другими ответчиками, что в большинстве случаев (почти всегда) необходимо санировать ваш вход.
но рассмотрим такой код (это для контроллера 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: применить ко всем другим супер глобальной переменной