Msgstr "Не получать доступ к суперглобальному $_REQUEST массиву напрямую". Netbeans 8.0 PHP

Эти вопросы задают после того, как прочитали несколько других.

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

"Не удается получить суперглобальный массив $_SERVER прямо" на Netbeans 7.4 для PHP

Почему filter_input() неполный?

Я загрузил последнюю версию Netbeans 8.0, и я видел предупреждение

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

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

Предложение довольно простое.

Вместо этого используйте некоторые функции фильтрации (например, filter_input(), условия с функциями _ *() и т.д.).

Итак, я начинаю искать fliter_input(), но он еще не реализован для $_REQUEST. Это похоже на тупик.

Затем я прочитал что-то, что было очень полезно (@bobince) "В начале вашего script, когда вы фильтруете, вы не знаете, где ваш вход будет завершен, так что вы не знать, как избежать этого."

Это напомнило мне, я точно знаю, где мой вход будет в конечном итоге, и точно, для чего он будет использоваться. Итак, я хотел спросить всех, если подход, который я собираюсь взять, по существу safe.

Я разрабатываю API REST-ish, и я использую $_SERVER['REQUEST_METHOD']; для определения ресурса, который необходимо вернуть. Я также использую $_REQUEST['resource'];, который должен содержать все на URI после /api/ после .htaccess rewrite.

Вопросы, которые я имею о моем подходе, следующие:

  • Если я всегда проверяю $_SERVER['REQUEST_METHOD']; на требуемый GET PUT POST DELETE (который мне все равно нужно будет делать), действительно ли проблема не связана с вводом?
  • Должен ли я обращаться к $_REQUEST['resource']; с помощью filter_input (INPUT_GET, 'resource');? Когда это будет использоваться только для определения ресурса и где ресурс не может быть определен (например, кто-то пытается добавить вредоносный код), мы просто не найдем ресурс и не вернем статус 404 Not Found.
  • Есть ли какие-то другие соображения, которые мне нужно учитывать, и я пропустил что-то важное в своем понимании?

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

Ответ 1

Итак, я начинаю искать fliter_input(), однако он еще не реализован для $_REQUEST. Это похоже на тупик.

Я бы сказал, что это не тупик, а намеренно. filter_input() требует четкого указания типа ввода. $_REQUEST не ясно, он содержит входные данные из разных источников, позволяя одному источнику перезаписывать другой.

Кроме того, это не то, что предупреждение точно хочет вам рассказать. Переключение суперглобального типа $_GET с такой же суперглобальной функцией, как filter_input(INPUT_GET, ...), показывает тот же дефект дизайна. Но Netbeans не может предупредить вас так же легко об этом.

И избавиться от суперглобалов - это уже хорошая идея.

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

Это позволит вам легко смоделировать любой метод запроса, даже не имея фактического запроса.