Почему авторизация обычно выполняется через POST-запросы
Что проверяют
Понимаете ли вы семантику HTTP-методов и отличаете ли реальную угрозу от заученной фразы «POST безопаснее». Хороший интервьюер тут же уточняет: а разве TLS не шифрует адрес целиком, и что тогда конкретно утекает.
Как отвечать
Сначала снимите главное заблуждение: под HTTPS шифруется всё, включая путь и строку запроса, поэтому «пароль в адресе перехватят по дороге» это неверная причина. Настоящие такие:
- утечка на концах, а не в канале: строка запроса оседает в истории браузера, в закладках, в логах веб-сервера и прокси, в системах аналитики и уходит в заголовке
Refererпри переходе на внешний ресурс. Тело POST по умолчанию в логи не попадает; - семантика метода: по RFC 9110 GET это безопасный и идемпотентный метод, он не должен менять состояние. Вход создаёт сессию, то есть меняет, значит GET не подходит по определению. Заодно браузеры и прокси вправе предзагружать GET-ссылки, а предзагрузка входа вам точно не нужна;
- кэширование: ответ на GET кэшируется по умолчанию, ответ на POST нет. Чужой ответ на вход, застрявший в кэше прокси или CDN, это утечка сессии;
- CSRF и CORS: GET вызывается со стороннего сайта через
<img>или<script>, вообще без JavaScript. POST сContent-Type: application/jsonуже требует предварительного запроса CORS, а вместе сSameSiteу куки и CSRF-токеном вектор закрывается; - объём и формат: длина адреса ограничена не стандартом, а реализациями (типичный порог сервера около 8 КБ), тело запроса таких ограничений не имеет.
Закончите тем, что сам по себе POST ничего не защищает. Нужны HTTPS с HSTS, ограничение частоты попыток входа, отсутствие пароля в логах и правильные атрибуты у сессионной куки.
Где спотыкаются
Говорят «в POST данные скрыты». Они не скрыты, а просто не в адресе: в инструментах разработчика и на любом прокси тело видно целиком.
Путают безопасность метода и идемпотентность. GET и безопасный, и идемпотентный; PUT и DELETE идемпотентны, но состояние меняют; POST не идемпотентен, потому повторная отправка формы и создаёт дубли.
Останавливаются на «так принято». Вопрос ровно про то, есть ли за привычкой понимание, поэтому назовите хотя бы логи, Referer и кэш.