Безопасность
CSRF: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь, ревьюя реальный дизайн аутентификации — не определение для заучивания, а компромисс, который надо взвесить, когда эндпоинт меняет состояние.
Убедись, что связываешь ambient authority, намеренные бреши SameSite, токен-паттерны и проверки Origin — тот синтез, к которому вёл урок, и ловушку, когда CORS принимают за защиту от CSRF.
Ревьюер заявляет: «наша сессионная кука HttpOnly и Secure, значит, мы защищены от CSRF». Почему это рассуждение неверно?
Сессионные куки — SameSite=Lax. Скрытая форма на evil.com авто-сабмитит кросс-сайтовый POST /transfer. Что произойдёт и какой эндпоинт реально остаётся уязвим?
Почему «никогда не меняй состояние на GET-запросе» — реальное правило безопасности, а не просто вкусовщина REST?
Stateless JSON API использует обычный double-submit cookie: случайное значение в куке, которое надо эхом вернуть в заголовке. Атакующий контролирует поддомен с XSS. Почему он обходит защиту и какой фикс?
Команда добавляет строгую CORS-политику (никаких чужих origin) и делает вывод, что её эндпоинты с изменением состояния теперь защищены от CSRF. Где рассуждение ломается?
Атакующий логинит браузер жертвы в АККАУНТ АТАКУЮЩЕГО (login CSRF), и дальнейшая активность жертвы пишется под личностью атакующего. Какая защита это закрывает и почему обычное рассуждение неполно?
Сквозная линия юнита — одна цепочка: куки — это ambient authority, поэтому браузер шлёт твою сессию на любой запрос к твоему origin — включая подделанную запись. SameSite=Lax срезал поверхность кросс-сайтового POST в 2020, но оставил побочные эффекты на GET, SameSite=None и окно 120с Lax+POST, так что это defense-in-depth, а не замок. Реальная защита слоит неугадываемый токен (synchronizer для stateful-приложений, HMAC-подписанный double-submit для stateless API), проверку Origin/Referer и правило, что мутации не едут на GET. И две ловушки повторяются: HttpOnly/Secure и CORS оба ощущаются как защита от CSRF, но касаются чтения, а не подделанной записи, которая уже выполнилась.