关于 jwt-security-review
jwt-security-review 是一项端到端审查 JWT 身份验证的技能,适合检查认证代码的开发者和安全审查人员。它涵盖算法、密钥、声明和令牌生命周期,并要求输出问题影响路径及修复建议。
主要功能
- 01检查算法固定与密钥类型
- 02评估密钥强度和轮换
- 03验证声明与权限字段
- 04审查刷新、撤销和存储策略
- 05提供攻击测试案例与修复建议
适用场景
- 01审查服务端 JWT 验证实现
- 02检查令牌声明是否可被滥用
- 03评估刷新令牌轮换和撤销流程
- 04为发现的问题整理影响路径与修复方案
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ securityskills/ skills --skill jwt-security-review安装后在 Claude Code 中输入/jwt-security-review确认已加载。
详细介绍
JWT 安全审查
端到端审查基于 JWT 的身份验证。
审查领域
算法处理
- 在服务器端固定预期算法;直接拒绝
alg: none - RS256→HS256 混淆:如果服务器使用公钥作为密钥来验证 HMAC,攻击者就可以伪造令牌。确认验证时针对每种算法使用正确的密钥类型
- 注意
jku/x5u头部注入:服务器可能会从攻击者可控的 URL 获取密钥 kid注入:密钥查找中的路径遍历或 SQL/命令注入
密钥和机密强度
- HS256 机密:熵至少为 32 字节,且不来自密码字典(
jwt-tools破解模式) - 轮换密钥;撤销旧密钥,而不只是停用
声明验证
- 强制验证
exp和nbf,限制时钟偏差 - 根据预期值验证
iss和aud - 拒绝包含非预期/额外特权声明(例如
admin: true)的令牌——解析后根据允许列表进行验证 - 如果存在服务器端查询,则不要信任由客户端控制的
role/uid声明
令牌生命周期
- 刷新令牌:轮换并检测重用;在服务器端以哈希形式存储
- 提供注销/更改密码/管理员强制注销时的撤销机制
- 访问令牌应设置较短的有效期(≤15 min);不要使用长期有效的持有者令牌
- 如果存在 XSS 攻击面,不要将令牌持久化到 localStorage;优先使用带 CSRF 防护的 httpOnly Cookie
sub应稳定且明确(使用用户 ID,而不是可能更改的电子邮件地址)
常见代码异味
jwt.decode(token) // decode ≠ verify: signature never checked
jwt.verify(token, key) // no algorithms option pinned
jwt.verify(token, key, { algorithms: ['*'] })
测试用例
- 移除签名;发送
alg: none令牌 - 将
alg改为 HS256,并使用公钥签名 exp已过期/缺失,iss/aud错误- 使用有效签名篡改声明(例如提升角色)
- 重放已轮换的刷新令牌——应使整个令牌族失效
输出
提供包含令牌样例(已脱敏)、受影响代码路径以及各问题修复方案的发现报告。
评论
支持 Markdown