---
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 风险与防护,与正文一致。

发表评论 取消回复