Подтвердить что ты не робот

В чем разница между HTTP-Get и HTTP-POST и почему HTTP-POST слабее с точки зрения безопасности

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

4b9b3361

Ответ 1

В запросе HTTP GET пары ключ/значение указываются в URL-адресе:

http://server/something?value1=foo&value2=bar.

В запросе HTTP POST пары ключ/значение отправляются как часть HTTP-запроса после заголовков. Например:

 POST /something HTTP/1.1
 Host: server
 Content-Length: 21
 Content-Type: application/x-www-form-urlencoded

 value1=foo&value2=bar

Трудно описать один как более безопасный, чем другой, но HTTP POST-данные не отображаются в URL-адресе, а при отправке данных на веб-сайт HTTP POST обычно может выполняться только в результате (например, нажав кнопку "Отправить" ).

Это означает, что пользователь не может быть обманут при посещении URL-адреса, такого как http://server/update_profile?name=I_suck, а конфиденциальные данные не отображаются в URL-адресе.

Вы также можете использовать nonces и другие теги анти-подделки с html-формами (которые используют POST) для предотвращения других форм запроса на межсайтовый сайт подделки.

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

Ответ 2

спецификация HTTP отличает POST и GET с точки зрения их намерения:

GET является idempotent: он предназначен для получения ресурса, не изменяя ничего на сервере. Как следствие, должно быть совершенно безопасно повторно отправить запрос GET.

POST не является: он предназначен для обновления информации на сервере. Поэтому нельзя предполагать, что можно повторно отправить запрос, поэтому большинство браузеров запрашивают подтверждение при нажатии обновления в запросе POST.

С точки зрения безопасности, никакой разницы. Возможно, POST более неясен, но это совсем другое дело. Безопасность необходимо добавить на другой уровень, например SSL.

Ответ 3

Некоторые заметки о запросах GET:

  • Запросы GET можно кэшировать
  • Запросы GET остаются в истории браузера
  • Запросы GET можно добавить в закладки
  • Запросы GET никогда не должны использоваться при работе с конфиденциальными данными.
  • Запросы GET имеют ограничения по длине
  • Запросы GET должны использоваться только для извлечения данных.

Некоторые примечания по запросам POST:

  • Запросы POST никогда не кэшируются
  • Запросы POST не сохраняются в истории браузера
  • Запросы POST не могут быть отмечены закладкой
  • Запросы POST не имеют ограничений на длину данных

(Источник: W3 Schools)

Ответ 4

Я бы не назвал POST более или менее безопасным, чем GET. По общему признанию, параметры отображаются как часть URL-адреса при использовании GET, поэтому любые конфиденциальные данные будут немедленно видны пользователю. Тем не менее, тривиально просматривать и даже изменять любую часть HTTP-запроса, поэтому просто потому, что POST не передает данные через URL-адрес, который все еще можно легко прочитать. Если вы не используете HTTPS, GET и POST будут передавать данные в легкодоступной форме.

Ответ 5

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

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