Безопасность
JWT pitfalls: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый отражает реальное решение о верификации — не определение для заучивания, а границу доверия, которую надо защитить против атакующего, контролирующего токен.
Убедись, что связываешь сбои JWT — доверие к алгоритму, привязку ключа, проверки claim, отзыв и хранение — в одно правило: никогда не позволяй токену описывать, как его проверять.
Версия библиотеки принимает токен с заголовком alg:none и пустым сегментом signature, возвращая valid. Почему это катастрофа и какой фикс в одну строку?
В атаке путаницы RS256→HS256 каким секретом атакующий подписывает поддельный токен и почему сервер его принимает?
Сервис корректно пинит alg:RS256 и проверяет signature, но токен, выпущенный для другого микросервиса в том же домене доверия, принимается как свой. Какой проверки claim не хватает?
Заголовок токена несёт kid, указывающий на https://attacker.example/jwks.json, и сервер берёт ключ по этому URL для проверки. В чём сбой и фикс?
Пользователь сообщает, что его сессию угнали. С stateless JWT почему нельзя разлогинить его на стороне сервера и что ограничивает ущерб?
SPA должна переживать перезагрузку страницы. Какое разделение хранения отгружает security-минд senior и почему?
Сквозная линия юнита — одно правило: никогда не доверяй токену описывать собственную верификацию. alg:none и путаница RS256→HS256 умирают, когда ты пинишь явный allowlist алгоритмов и привязываешь каждый ключ к одному алгоритму; контролируемые атакующим kid/jku умирают, когда ты резолвишь ключи только по закреплённому allowlist. Валидная signature необходима, но недостаточна — проверяй aud и iss, чтобы токен был привязан к ЭТОМУ сервису. А поскольку stateless-токен нельзя «отвыпустить», короткие TTL access, ротация refresh-токена с детектом повтора и XSS-осознанное хранение ограничивают то, что утечёт.