Какие способы минимизировать последствия кражи токенов существуют
Что проверяют
Понимаете ли вы, что токен рано или поздно украдут, и защита строится на трёх вещах: он живёт недолго, работает только у владельца и отзывается по требованию. Для тестировщика главный уточняющий вопрос: какие проверки вы напишете, чтобы убедиться, что всё это действительно работает.
Как отвечать
Назовите меры и к каждой сразу приложите проверку:
- короткий срок жизни access-токена: минуты, а не сутки. Тест: запрос с просроченным токеном получает
401; - ротация refresh-токена с обнаружением повтора: каждый обмен выдаёт новый refresh, старый становится недействительным, а повторное предъявление старого отзывает всю цепочку. Тест: использовать один refresh дважды и убедиться, что второй раз отклонён, а сессия закрыта;
- отзыв на сервере: выход, смена пароля и «завершить все сеансы» гасят токены на сервере, а не только стирают их в браузере. Тест: сохранить токен, выйти, повторить запрос с ним;
- хранение: refresh в куке с
HttpOnly,SecureиSameSite, а не вlocalStorage, откуда его достанет любой XSS. Тест: атрибуты кук в DevTools, отсутствие токена в URL, логах иReferer; - привязка к клиенту: DPoP или mTLS связывают токен с ключом клиента, и украденная строка без ключа бесполезна;
- минимальные права: узкие
scopeиaud, чтобы токен одного сервиса не открывал другой.
Отдельный блок для JWT: подмена alg на none, правка payload без переподписи, токен с чужим aud. Всё это должно давать отказ. Инструменты: Burp Suite или OWASP ZAP для перехвата и повтора запросов, Postman для сценариев с цепочкой токенов.
Где спотыкаются
Советуют шифровать токен на клиенте. Ключ тогда тоже лежит на клиенте, и атакующий получает оба. Защищают хранилище и срок жизни, а не прячут строку.
Путают предотвращение кражи с минимизацией последствий. CSP и защита от XSS снижают шанс кражи, а вопрос про то, что будет после: ротация, отзыв, привязка к клиенту.
Проверяют только успешный вход и не пишут негативных сценариев: повтор старого refresh, запрос после выхода, токен после смены пароля. Именно там чаще всего находятся дыры.