Почему я должен использовать $ _GET и $ _POST вместо $ _REQUEST? [Дубликат]

Помимо того, что $_REQUESTчитает из куки, есть ли причины, почему я должен использовать, $_GETа $_POSTне $_REQUEST? Каковы теоретические и практические причины для этого?

15.12.2008 13:16:18
7 ОТВЕТОВ
РЕШЕНИЕ

Я использую $ _REQUEST, когда я просто хочу, чтобы определенные данные от пользователя возвращали определенные данные.

Никогда не используйте $ _REQUEST, когда запрос будет иметь побочные эффекты. Запросы, которые вызывают побочные эффекты, должны быть POST (по семантическим причинам, а также из-за базовых CSRF-атрибутов, ложный тег img может поразить любую конечную точку GET без ведома пользователя).

$ _GET следует использовать, когда GETing или POSTing на странице будут давать разные результаты.

10
15.12.2008 15:44:53
Поздравляем, вы только что получили свой первый принятый ответ :) Добро пожаловать на stackoverflow.com!
Tom 16.12.2008 11:06:37

Использование $ _REQUEST открывает некоторые векторы атак для вашего приложения, где переменные могут быть перезаписаны там, где вы этого не хотите.

Также рассмотрите порядок GPC (Get, Post, Cookie), по которому будет заполнен $ _REQUEST.

т.е. запрос с:

$_GET['foo'] = 'bar'
$_POST['foo'] = 'baz'

приведет к

$_REQUEST['foo'] == 'bar'

4
15.12.2008 14:14:27
Обратите внимание, что вы можете изменить порядок заполнения переменной Request, если вы управляете php.ini
gnud 15.12.2008 13:24:15
Это только я или POST придет после GET в вашем примере, таким образом, содержимое переменной будет перезаписано? Не уверен, вот почему я спрашиваю ...
Franz 17.12.2009 22:17:29

Вы уже дали один из ответов, поэтому я дам другой:

Это скорее стилистический выбор. Например, вы обычно не хотите, чтобы информация, которая изменяет состояние на сервере, была кэшируемой, поэтому вы, вероятно, хотите ограничить ее $_POSTпеременными.

5
15.12.2008 13:20:39
Отличный ответ! Я надеюсь увидеть больше из них.
Tom 15.12.2008 13:54:52

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

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

2
15.12.2008 13:56:18
Совершенно верно, люди хотят кричать, что запрос - это большая дыра в безопасности, но даже GET и POST одинаково небезопасны, в них легко вставлять непослушные биты, вам нужно всегда дезинфицировать все данные, даже то, что поступает из вашей базы данных.
TravisO 15.12.2008 17:00:10

Помимо того, что $ _REQUEST читает из куки

Помимо того факта, что это не определено (это настраивается на уровне установки), проблема в $_REQUESTтом, что он упрощает вещи. Существует (или должно быть) семантическая разница между запросом GET и запросом POST. Таким образом, ваше приложение должно иметь значение, если вы получаете информацию из одного или другого источника. Так определяется протокол HTTP, поэтому, игнорируя его, вы подрываете протокол, что делает ваше приложение менее совместимым. Это тот же тип аргумента, который может быть сделан для использования семантической разметки HTML, а не ориентированной на представление разметки. Или, в более общем смысле, следуя намерениям протокола, а не просто делая все, что работает в конкретной ситуации.

8
15.12.2008 14:08:28

Вот тот, который я только что нашел: Когда и почему следует использовать $ _REQUEST вместо $ _GET / $ _POST / $ _COOKIE? , Извините, я не нашел это раньше, поэтому я бы не стал задавать вопрос ...

0
23.05.2017 10:32:58

HTTP GET семантически предназначен для использования для извлечения страницы, в то время как POST можно утверждать, что при использовании вы можете ожидать изменения какого-либо состояния.

Например, ожидается, что использование GET с одними и теми же параметрами несколько раз даст одинаковые результаты, а при использовании POST - нет.

Не использовать POST, когда вы должны поддаваться проблемам. Я думаю, что библиотеки Ruby on Rails AJAX использовали GET вместо POST и приводили к потере большого количества данных при прикосновении к веб-паукам.

Следовательно, вам, вероятно, следует избегать использования $ _REQUEST. Вы должны знать цели того, что делает страница, и решать, как ответить на запрос GET и как ответить на запрос POST.

2
16.12.2008 22:50:21