Это неправильно использовать $ _REQUEST для данных? - PullRequest
5 голосов
/ 19 декабря 2009

Итак, я немного программирую (2 года), и у меня очень субъективный вопрос:

Неправильно ли использовать $ _REQUEST для данных?

Кстати, это в основном относится к аутентификации.

Если вы думаете о 3 способах, которыми данные могут появляться в $_REQUEST, они могут быть получены из файла cookie, формы или строки запроса. Теперь я знаю, что большинство людей напрямую получают информацию из $_POST или $_GET, используя $_COOKIE только тогда, когда они ожидают cookie.

Моя теория состоит в том, что в действительности не должно быть никакой разницы в этих данных, и это не должно иметь никакого значения, если вы заменили $_POST или $_GET на $_REQUEST.

Если вы аутентифицируете пользователя в системе, действительно ли имеет значение, содержатся ли данные аутентификации в массиве $_POST или $_GET? Черт возьми, это, вероятно, не должно иметь значения, если они находятся в $_COOKIE. Они по-прежнему дают вам учетные данные для входа на сайт, которые вы должны проверить на правильность, и если это так, войдите в систему.

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

Я бы хотел высказать свое мнение по этому поводу.

Сообщество Wiki'd для хорошей меры.


Да, и между прочим, вот другие вопросы StackOverflow, которые касаются, если у вас есть другие вопросы о $_REQUEST

Почему я должен использовать $ _GET и $ _POST вместо $ _REQUEST? Когда и почему следует использовать $ _REQUEST вместо $ _GET / $ _POST / $ _COOKIE?

Ответы [ 5 ]

14 голосов
/ 19 декабря 2009

В «хорошей» практике кодирования вы хотите устранить неоднозначность в максимально возможной степени.

Поскольку $ _REQUEST содержит данные из $ _POST, $ _GET и $ _COOKIE по умолчанию, значение, которое хранится в переменной, в которой хранятся данные, извлеченные с помощью $ _REQUEST, будет неоднозначно относительно метода, из которого они получены.

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

(не говоря уже о проблемах безопасности, связанных с каждым методом, особенно с $ _GET)

3 голосов
/ 19 декабря 2009

Я бы сказал, избегайте всего этого вместе. Я согласен с Севом в том, что устранение неоднозначности важно по многим причинам (отладка, ясность / самодокументирование, элегантность и т. Д.), Но могут возникнуть серьезные проблемы с безопасностью, и это будет моей главной причиной, чтобы избежать их.

В качестве простого примера, что происходит, когда один и тот же ключ отправляется в двух массивах (например, $_POST['criticalInfo'] и $_GET['criticalInfo'])? Как и в случае большинства проблем безопасности, уязвимости проявляются в отдельной реализации, поэтому невозможно угадать ваши конкретные риски. Дело в том, что неоднозначность часто открывает дыры.

0 голосов
/ 21 декабря 2009

Речь также идет о том, чтобы учетные данные не поступали иначе, чем запрос POST. Я не хотел бы, чтобы мой запрос GET имел побочные эффекты (например, вход в систему пользователя).

0 голосов
/ 19 декабря 2009

Это неправильно ? Нет.

Это хуже, чем $_GET или $_POST? Да. Используйте правильный массив, и вы избежите всевозможных проблем, связанных с незнанием, откуда взято содержимое массива $_REQUEST.

0 голосов
/ 19 декабря 2009

Не оставляйте это значение до "variable_order" в PHP_INI, чтобы определить, откуда ваш скрипт получает переменные. Используйте $ _GET, $ _POST и т. Д.

...