Ответ
Для тестировщика ключевые особенности JWT (JSON Web Token) связаны с его структурой, способом проверки и типичными уязвимостями.
Особенности, важные для тестирования:
- Самодостаточность (Stateless): Серверу не нужно хранить токен в сессии. Он проверяет его подпись и декодирует данные из payload. Тесты должны проверять, что сервер корректно валидирует подпись, а не доверяет данным из незашифрованной части токена.
- Структура из трех частей:
Header.Payload.Signature. Полезная нагрузка (Payload) в кодировке Base64Url может быть легко просмотрена, но не должна содержать конфиденциальных данных. - Проверка подписи: Безопасность зависит от алгоритма подписи (например, HS256, RS256). Неправильная реализация на стороне сервера — частый источник уязвимостей.
Типичные сценарии тестирования безопасности JWT:
- Подмена алгоритма подписи (
alg: none): Попытка отправить токен с алгоритмомnone, чтобы обойти проверку подписи. - Подбор ключа подписи (HS256): Для симметричных алгоритмов, если секрет слабый или утечек.
- Просроченные токены: Проверка, что токены с истекшим сроком (
exp) отклоняются. - Неверная аудитория (
aud): Проверка, что токен, выданный для одного сервиса, не принимается другим.
Пример проверки в тестах (используя инструменты вроде Burp Suite или Postman):
- Декодируйте токен на сайте вроде jwt.io, чтобы увидеть его содержимое.
- Попробуйте изменить payload (например, поле
roleсuserнаadmin), не меняя подпись, и отправить запрос — сервер должен отвергнуть такой токен. - Проверьте реакцию API на просроченный, поврежденный или отсутствующий токен (ожидаются коды ответа 401 или 403).