Какие кейсы нужно проверить после авторизации с двухфакторной аутентификацией
Что проверяют
Понимаете ли вы, что 2FA ломается не на экране ввода кода, а вокруг него: в сессии, в обходных путях и в «запомнить устройство». Интервьюер ждёт, что вы думаете как атакующий, а не только как пользователь. Следом часто спрашивают: «Как проверите, что второй фактор нельзя обойти?»
Как отвечать
Сгруппируйте кейсы:
- промежуточное состояние: после верного пароля, но до кода защищённые страницы и API недоступны ни по прямой ссылке, ни по токену. Это самый важный кейс;
- сессия: идентификатор сессии меняется после входа (защита от session fixation), cookie стоят с флагами
HttpOnly,Secure,SameSite, после выхода токен отзывается на сервере, а кнопка «Назад» не показывает закэшированные данные; - повтор и перебор: один и тот же TOTP-код нельзя использовать дважды, число попыток ограничено, резервные коды одноразовые;
- «запомнить устройство»: срок действия, привязка к конкретному браузеру, сброс после смены пароля или отключения 2FA;
- чувствительные действия: смена пароля, почты, телефона и отключение 2FA требуют повторного подтверждения;
- другие сессии: список активных устройств, «выйти везде», судьба старых сессий после включения 2FA;
- обходные входы: восстановление пароля, вход через соцсети или SSO, мобильное приложение и старые версии API не должны пропускать второй фактор;
- уведомления: письмо или пуш о входе с нового устройства.
Для проверок пригодятся DevTools, Postman и Burp Suite: через прокси видно, кто принимает решение, сервер или клиент. Классика: в ответе меняют "success": false на true, и фронтенд пускает дальше. Если после этого API отдаёт данные, второй фактор проверялся только на клиенте.
Где спотыкаются
Перечисляют только ввод кода: верный, неверный, просроченный. Это кейсы самой аутентификации, а вопрос про то, что происходит после неё.
Проверяют всё через интерфейс. Большинство обходов 2FA находится прямым запросом к API, минуя экран с кодом.
Забывают про время. TOTP зависит от часов устройства, и сервер обычно принимает соседний 30-секундный интервал. Нужно проверить и расхождение часов, и то, что окно не шире заявленного.