JWT pitfalls на собеседовании системного аналитика

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.

Зачем разбирать pitfalls

JWT — popular, но often misimplemented. Senior SA должен ловить.

alg=none attack

JWT header specifies algorithm. alg: none — no signature.

Some libraries default accept «none» → attacker forges любой JWT.

Defense. Whitelist accepted algorithms (HS256 или RS256 only). Reject «none», «alg» mismatches.

Weak secrets

HMAC signature requires secret. Если secret короткий / guessable → brute-force.

secret = "secret123"

Cracked в seconds.

Defense. Long random secrets (256+ bits). Rotate periodically.

No expiry

JWT без exp claim — valid forever. Stolen token = lifetime compromise.

Defense. Always include exp. Short-lived (15-60 min) + refresh tokens.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Revocation

JWT stateless — server не has «sessions».

Problem. Сompromised token — нельзя immediately invalidate (валиден до expiry).

Solutions:

  • Short-lived tokens.
  • Blacklist compromised JTI (jwt id).
  • Token introspection endpoint (defeats statelessness, но secure).

Key rotation

Periodic rotate signing keys.

JWKS. JSON Web Key Set — public endpoint listing current valid keys.

GET /.well-known/jwks.json
{
  "keys": [
    {"kid": "key-2026-05", "kty": "RSA", "n": "...", "e": "..."},
    {"kid": "key-2026-04", ...}  // old, still verifying old tokens
  ]
}

Servers fetch periodically. Smooth key rotation.

kid (key ID) в JWT header — points to right key.

Связанные темы

FAQ

Это официальная информация?

Нет. Статья основана на RFC 7519 (JWT) и OWASP cheat sheets.


Тренируйте системный анализ — откройте тренажёр с 1500+ вопросами для собесов.