Может ли кто-нибудь объяснить разницу между HTTP-GET и HTTP-POST? И почему люди говорят, что HTTP-POST слабее с точки зрения безопасности?
В чем разница между HTTP-Get и HTTP-POST и почему HTTP-POST слабее с точки зрения безопасности
Ответ 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-запросы).