У меня есть предупреждение об этом в Netbeans 7.4 для PHP, в то время как я использую $ _POST , $ _GET , $ _SERVER , ….
Не удается получить суперглобальный массив $ _POST
Что это значит? Что я могу сделать, чтобы исправить это предупреждение?
Изменить: Код примера события по-прежнему показывает это предупреждение.
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 и filter 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(); }
Было бы нецелесообразно применять здесь санитарию (хотя это и не сломало бы ничего).
Итак, следуйте рекомендациям, но не слепо – скорее поймите, для чего они предназначены 🙂