首页/安全/渗透测试与安全评估速查/JWT 算法相关风险检查
常见漏洞验证121 条

JWT 算法相关风险检查

历史问题集中在算法混淆与密钥强度:服务端若未固定算法,可能接受非预期算法;检查服务端校验逻辑与密钥管理。

JWT 风险集中在哪

JWT 本身的结构(头部、载荷、签名)是公开标准,问题几乎都出在服务端的校验环节:算法是否固定、密钥是否足够强且各环境隔离、过期与签发者是否校验。历史问题集中在算法混淆(服务端信任头部 alg 字段)与弱密钥被离线破解;检查方式以代码走查与自有环境复现为主,而不是构造混淆令牌去打生产。

基本信息

适用平台所有使用 JWT/JWS 的应用与网关(Java、Node、Go、Python 均有实现)
代码走查校验代码是否写死算法、是否校验 exp/iss/aud
密钥管理长度与随机性、是否多环境复用、是否可轮换
参考标准RFC 8725(JWT 最佳实践)、OWASP JWT Cheat Sheet

典型使用场景

  • 单点登录与开放平台鉴权方案的评审
  • 排查“令牌可被伪造”类安全事件根因
  • 核查密钥是否在测试与生产环境中复用
  • 评估令牌有效期与刷新机制的合理性
  • 微服务间使用 JWT 传递身份时的边界检查

核查方式(以代码走查为主)

核查方式(以代码走查为主)
1. 查看令牌校验代码:算法是否写死为预期值,是否拒绝未知算法
2. 核对密钥来源与长度:是否来自配置中心、是否各环境独立、是否可轮换
3. 确认 exp、iss、aud 是否逐项校验,时钟偏移是否有明确上限
4. 检查头部扩展字段(如 kid、jku、x5u)是否被用于动态获取密钥
5. 动态验证仅使用自有账号令牌做对照,不构造混淆令牌对生产验证

风险点与加固方向

风险点说明加固方向
算法未固定服务端信任头部 alg 字段校验时指定允许的算法集合
密钥强度不足短密钥可被离线暴力破解使用足够长度的随机密钥并定期轮换
密钥复用测试环境密钥泄漏影响生产按环境隔离密钥与配置
声明未校验过期与签发者被忽略逐项校验 exp/iss/aud
头部注入kid 被拼接进查询或路径白名单校验头部取值
不构造算法混淆或伪造令牌对生产环境验证:这类测试一旦生效会影响其他会话与审计记录,统一以代码走查加自有环境复现来支撑结论。
令牌有效期与业务风险挂钩:管理面与高敏操作建议更短的访问令牌配合一次性刷新,避免长期令牌泄漏后难以回收。

易错点

  • 认为“用了 JWT 就等于安全”,忽略密钥强度与算法固定这两项关键实现
  • 在缺少报备的情况下伪造令牌对生产验证,影响真实会话与审计
  • 只测签名校验,漏掉 exp/iss/aud 这类声明是否真的被逐项核对
  • 只走查令牌校验代码,忽略网关与下游服务各自的解析实现差异
  • 密钥在测试与生产环境复用,测试环境泄漏直接导致生产令牌可被伪造

数据来源与参考

  • RFC 8725(JWT 最佳实践)
  • OWASP JWT Cheat Sheet
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌