Есть ли реальная причина различать POST и GET при обработке входящих данных? - PullRequest
0 голосов
/ 19 февраля 2010

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

Сегодня я заметил, что у codeigniter есть одна функция получения для данных POST и одна для GET. Есть ли смысл в этом? У кого-нибудь здесь была причина заботиться о том, откуда поступают его данные?

Пара разъяснений: я не спрашиваю о различиях между POST или GET или тем, который я должен использовать для отправки данных на страницу. Я спрашиваю, нужно ли мне заботиться о том, поступают ли данные на мою страницу через GET или POST.

Ответы [ 7 ]

2 голосов
/ 19 февраля 2010

Это вопрос семантики - если для интерфейса (такого как REST) ​​требуется более высокий уровень семантики, то это одна из веских причин заботиться о HTTP-глаголе.

2 голосов
/ 19 февраля 2010

Стандарт HTTP определяет различную семантику для операций get / post (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html Sec 9.1.1)

В частности, вы можете осуществлять поиск информации, используя данные, поступающие из запроса get, но вы не должныне делайте ничего, что включает в себя некоторое представление об изменении состояния.Одна из причин этого заключается в том, что пользовательский агент может выполнять предварительную выборку страниц (и выполнять запросы на получение), не нажимая на ссылку пользователя.(Согласен, что это не очень распространено среди веб-браузеров, но я слышал, что почтовые клиенты так делают)

1 голос
/ 19 февраля 2010

Это вопрос политики вашего проекта. У обоих и у обоих свои места.

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

Одной из причин, почему вы действительно, действительно хотите запретить GET, являются поля пароля и тому подобное. Вы не хотите, чтобы ваши пользователи (по незнанию) хранили свои конфиденциальные данные в истории браузера, поэтому не поощряйте их делать это с помощью GET. OTOH, вы можете «ПОЛУЧИТЬ» с простого <a href="">, поэтому, если вы экспортируете какие-либо API для «любого», предоставьте либо GET один, либо оба.

1 голос
/ 19 февраля 2010

GET-Requests предоставляет все данные в LOG-файлы (ваши и прокси между ними), Рефереру и видимы для людей, просматривающих ваш браузер.

Данные через GET ограничены по длине.

Если вы заботитесь о безопасности: зачем вам принимать данные, отправленные вашими формами через GET, если вы знаете, что ваш метод формы был POST?

1 голос
/ 19 февраля 2010

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

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

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

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

1 голос
/ 19 февраля 2010

В случае простых веб-форм вам, вероятно, все равно.Но когда на карту поставлено обеспечение безопасности, вы можете позаботиться о разнице: если кто-то помещает входной сигнал hidden в переменную GET, и вы рассматриваете его так же, как если бы он пришел из POST, это потенциальный вектор атаки.

В RESTful API вы определенно заботитесь о разнице: POST означает совершенно другую вещь, чем GET в этом случае, вместе с его кузенами, которыми так часто пренебрегают, PUT и DELETE.

1 голос
/ 19 февраля 2010

Вы можете заботиться о разнице, хотите ли вы, чтобы ваши данные приходили из формы (POST) или передавались через параметры URL (GET). Например. по соображениям безопасности вы не захотите принимать URL-данные, если ожидаете, что пользователь заполнит форму.

И только для записи: не нужно проверять оба массива, в PHP массив $ _REQUEST содержит их оба (плюс COOKIE).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...