---

title: "JWT 安全实践:算法选择、kid 注入与签名校验"

keywords:

  • JWT
  • alg none
  • kid 注入
  • JWK
  • 签名校验
  • 最佳实践

description: "总结 JWT 在生产中的常见风险与最佳实践,包括禁用 alg=none、稳健的签名算法选择、kid/JWK 处理与签名严格校验。"

categories:

  • 文章资讯
  • 技术教程

---

概述

JWT 广泛应用于 REST API 与 OIDC/OAuth2 等场景。常见攻击点包括:启用 alg=none、不严格的签名校验、弱密钥与 kid 文件/命令注入、嵌入式 JWK 被不当信任等。本文给出防护要点与工程建议。

关键风险

  • alg=none:将 Header 的 alg 改为 none 并省略签名,可导致令牌伪造;必须在服务端禁用并拒绝[参考1,2,5]。
  • kid 注入:未校验的 kid 被拼接到文件路径或传入不安全函数,可能触发 LFI/RCE;kid 仅作为安全查找键,需白名单与严格校验[参考2]。
  • JWK 头部嵌入信任:若允许头部嵌入的 JWK 被直接信任,攻击者可替换为自己的公钥并签名伪造;必须仅信任服务端配置的密钥集合[参考3]。
  • 弱密钥/密钥泄露:HMAC 弱密钥易被爆破;私钥泄露导致全面伪造。

最佳实践

  • 明确签名算法:仅接受固定算法(如 RS256/ES256),拒绝 none 与算法切换;同时在库层禁用 none 支持[参考1,2,5]。
  • 严格校验签名:校验签名与发行方(iss)、受众(aud)、过期(exp)、唯一标识(jti)与不可用时间(nbf)[参考4]。
  • 安全处理 kid:使用白名单映射到密钥仓库,不拼接文件路径、不传入系统命令;避免将 kid 直接用于文件读取或数据库查询。支持旋转时确保新旧密钥并存期的安全性[参考2]。
  • JWK/JWKS:仅从可信端点加载并缓存;头部嵌入的 JWK 一律拒绝;验证证书链与签名来源[参考3]。
  • 存储与传输:令牌仅包含必要最小信息,不含敏感数据;避免长期有效期;支持主动吊销(黑名单/令牌版本)。

参考与验证

  • [参考1]博客园:JWT 认证攻击与 alg=none 漏洞演示与修复建议:https://www.cnblogs.com/backlion/p/16699442.html
  • [参考2]博客园:JWT 攻击手册(kid 注入场景与防护、签名算法选择):https://www.cnblogs.com/xiaozi/p/12031111.html
  • [参考3]FreeBuf:JWT 安全性分析与嵌入 JWK 信任风险讨论(含 CVE 案例):https://www.freebuf.com/vuls/219056.html
  • [参考4]安全博客:JWT 声明字段与校验清单(iss/aud/exp/nbf/jti):https://www.secpulse.com/archives/194478.html
  • [参考5]技术笔记:alg=none 漏洞原理与演示与修复建议:https://si1ent.xyz/2020/10/21/JWT安全与实战

关键词校验

关键词聚焦 JWT 风险与防护,与正文一致。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部