Типичные уязвимости JWT
Вопрос
Какие уязвимости встречаются при работе с JWT и как их предотвратить?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
alg none и путаница алгоритмов: фиксировать алгоритм и тип ключа
Слабый секрет HS256 перебирается офлайн: длинный случайный секрет или асимметричные ключи
Нет проверки exp, aud, iss
kid, jku из заголовка: ключи только из своего набора
Payload не зашифрован; отзыв через короткий срок и ротацию refresh
Хранение на клиенте: компромисс XSS и CSRF
Что могут спросить следом
- Как реализовать выход из всех устройств с JWT?
- Когда лучше серверная сессия, а не JWT?
Разбор
Образцовый ответ: «Классика: сервер принимает alg: none или берёт алгоритм из заголовка, и тогда при RS256 можно подписать токен публичным ключом как HMAC-секретом. Лечится явным списком алгоритмов и ключей. Второе: слабый секрет HS256, его перебирают по любому токену офлайн, нужен длинный случайный секрет. Третье: не проверяют exp, aud, iss и принимают токен от соседнего сервиса. Четвёртое: заголовки kid и jku, которые подсовывают путь или URL ключа. Плюс помнить, что payload читается всеми, и JWT нельзя отозвать: access живёт минуты, refresh ротируется и хранится на сервере, тогда выход везде это отзыв refresh. Если сервис один и монолит, часто проще серверная сессия».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.