Какой HTTP-метод безопаснее для передачи конфиденциальных данных: GET или POST?

Ответ

POST безопаснее для передачи конфиденциальных данных, таких как пароли или данные платежей.

Почему?

  • GET передает параметры в URL-строке, что делает их видимыми в:
    • истории браузера,
    • логах веб-сервера,
    • адресной строке.
  • POST отправляет данные в теле HTTP-запроса, что скрывает их от прямого наблюдения.

Пример уязвимости GET:

<!-- Пароль виден в URL и может быть сохранен в закладках или логах -->
<a href="https://site.com/login?user=admin&password=secret123">Ссылка для входа</a>

Важные уточнения:

  1. Ни GET, ни POST не обеспечивают шифрования. Для защиты от перехвата (MITM-атак) обязательно используйте HTTPS.
  2. GET предназначен для идемпотентных запросов (получение данных, фильтрация, поиск), которые не изменяют состояние сервера.
  3. POST предназначен для неидемпотентных операций (создание, изменение данных, отправка форм).

Ответ 18+ 🔞

А, слушай, ну это же классика, про которую все вроде как знают, но потом всё равно ебут корову через пакет. Ну ладно, разжую.

Вот смотри, есть два способа попросить у сервера что-то: GET и POST. И если тебе нужно отправить что-то секретное — логин, пароль, номер карты своей бабушки — ты должен использовать POST. А почему?

Да потому что GET — это как кричать своё желание на всю улицу. Все параметры он лепит прямо в URL, вот сюда: https://site.com/login?user=admin&password=secret123. И этот пиздец остаётся:

  • В истории браузера.
  • В логах любого сервера на пути.
  • В адресной строке, где его может подсмотреть какая-нибудь мартышлюшка через плечо.
  • Его можно в закладки сохранить, блядь! Представь: "Избранное -> Мой пароль от банка". Ёперный театр!

А POST — он потихоньку, в теле письма, так сказать, передаёт. Не светит нигде. Уже лучше.

Вот тебе пример, от которого волосы дыбом встают:

<!-- Смотри, какой пиздец. Пароль прямо в ссылке висит! -->
<a href="https://site.com/login?user=admin&password=secret123">Ссылка для входа</a>

Нажал на такую ссылку — и всё, пидарасы-админы в логах уже видят твой пароль. Красота, да?

НО, ВНИМАНИЕ, ВАЖНАЯ ХУЙНЯ, КОТОРУЮ ВСЕ ПРОПУСКАЮТ МИМО УШЕЙ:

  1. Ни GET, ни POST сами по себе не шифруют нихуя. Это просто способы упаковать данные. Если между тобой и сервером нет HTTPS (этот самый замочек в браузере), то хоть POST, хоть GET — всё летит открытым текстом, и любой, кто влез в сеть, может это перехватить. Так что HTTPS — это святое, без него вообще не суйся никуда.

  2. GET — для запросов, которые ничего не меняют. Получить страницу, применить фильтр, поискать. Нажал пять раз — результат тот же. Это идемпотентные запросы, если по-умному.

  3. POST — для действий, которые что-то меняют в мире. Отправить форму, создать заказ, запостить коммент. Это неидемпотентные операции. Отправишь пять раз — получишь пять заказов и охуеешь от суммы.

Короче, запомни: секреты — только в POST, и только поверх HTTPS. А то будет тебе не безопасность, а один большой пиздец.