Почему формы не должны быть отправлены с GET - PullRequest
3 голосов
/ 12 декабря 2010

У меня есть форма, которую я отправляю с помощью GET, что означает, что данные добавляются в URL.Форма защищена токеном безопасности.

Мне всегда говорили, что формы должны быть отправлены с POST.В моем случае, что произойдет, если форма будет отправлена ​​с GET?Какой там риск безопасности?

Ответы [ 4 ]

4 голосов
/ 12 декабря 2010

Если у вас БОЛЬШАЯ форма, обратите внимание на ограничение длины URL для каждого браузера

URL Length = protocol+domain+port+query_string (GET)

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

4 голосов
/ 12 декабря 2010

Реальный риск заключается в том, что пользователи могут точно видеть, какие параметры отправляются на ваш сервер, и могут не только добавить этот URL в закладки (для повторной отправки), но также могут изменить URL-адрес для отправки других, потенциально бессмысленных, параметров на ваш сервербоковой скрипт.

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

В вашем случае это зависит от характера «токена безопасности» и вероятности причинения вреда, если этот токен виден (и может быть изменен) пользователями вашего сайта / приложения.Стоит отметить, однако, что это также видно в html-источнике страницы отправки, даже если вы используете POST для отправки формы.

В зависимости от того, что происходит с данными при получении на стороне серверасценария, вы также должны санировать предоставленную информацию, чтобы уменьшить область для внедрения SQL и так далее (от +1 до @ Switz ).

3 голосов
/ 12 декабря 2010

IMO основной причиной использования POST является не безопасность (вы можете защитить GET), но это вопрос правильной семантики.

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

3 голосов
/ 12 декабря 2010

Если у вас хорошо реализованный токен, то нет никакой разницы, кроме вопроса о закладках.GET позволит вам добавить в закладки URL с указанными параметрами, а POST - нет.Что касается хорошо реализованного токена, я бы сказал, что случайная строка длиной 12-15 символов, хешированная в MD5, должна делать эту работу.

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

Любой пользователь может отправить любые бессмысленные или повторно передать данные в сценарий на стороне сервера, независимо от того, как данные отправляются туда (POST или GET), поэтому это недопустимое соображение ... Задача сценария на стороне сервера состоит в том, чтобы проверить представленные данные и решить, обрабатывать их или нет.Если конфиденциальная информация передается на сервер, вы должны использовать POST, чтобы избежать добавления пользователя в закладки и, главным образом, чтобы браузер не сохранял ее в истории просмотра, чтобы любой мог потенциально просмотреть пароли пользователя и т. Д.

Очистка данных имеет важное значение, однако не имеет ничего общего с методом формы.Как правило, защита от XSS (htmlentities), SQL-инъекция (mysql_real_escape_string) считается самой базовой защитой, которая должна быть реализована при вводе пользователем (первая, если пользовательские данные появятся в источнике html, вторая, если выиспользуете представленные данные с доступом к SQL).

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