jwt 防重放攻击

🤔 为什么攻击者修改随机数后依然无法通过?

假设攻击者截获了一个合法的请求:

http 复制代码
POST /api/transfer
X-Timestamp: 1722240000
X-Nonce: abc123
Authorization: Bearer <合法的JWT>

现在,攻击者想重放这个请求,他尝试修改随机数:

http 复制代码
POST /api/transfer
X-Timestamp: 1722240000
X-Nonce: xyz789  <-- 修改了随机数
Authorization: Bearer <合法的JWT>

这时候,服务端会进行两步校验:

  1. 验证 JWT 签名:攻击者手里有原始的 JWT,这个 JWT 本身是合法的(没过期,签名正确)。所以这一步能通过。
  2. 验证请求指纹 :服务端用 用户ID + 时间戳 + 新随机数 生成指纹 xyz789,去 Redis 里查,发现没记录过,于是放行。

看起来攻击成功了?并没有!

因为真正的防重放机制,并不是只校验 JWT 和随机数,而是将请求的关键部分(如时间戳、随机数、甚至请求体)与 JWT 绑定在一起进行签名

🔒 真正的防重放:请求签名

为了防止攻击者篡改请求的任何部分(包括随机数),我们需要对整个请求进行签名。

正确的流程是这样的:
  1. 客户端准备数据

    • 生成时间戳 X-Timestamp
    • 生成随机数 X-Nonce
    • 准备请求体 Body
  2. 客户端生成签名

    • X-Timestamp + X-Nonce + Body 拼接起来。
    • 使用一个只有客户端和服务端知道的密钥 (可以是 JWT 的密钥,也可以是单独的 AppSecret)对这个拼接字符串进行 HMAC-SHA256 等哈希运算,生成一个签名 Signature
    • Signature 放入请求头(例如 X-Signature)。
  3. 客户端发送请求

    http 复制代码
    POST /api/transfer
    X-Timestamp: 1722240000
    X-Nonce: abc123
    X-Signature: <计算出的签名>
    Authorization: Bearer <合法的JWT>
    Body: {"amount": 100, "to": "userB"}
  4. 服务端校验

    • 第一步:验证 JWT,确认用户身份。
    • 第二步:验证签名 。服务端用同样的密钥,对收到的 X-Timestamp + X-Nonce + Body 重新计算一遍签名。
    • 第三步:比对签名 。如果服务端计算出的签名和请求头里的 X-Signature 一致,说明请求内容(包括时间戳、随机数、请求体)在传输过程中没有被篡改
    • 第四步:防重放检查 。将 X-Timestamp + X-Nonce 存入 Redis,检查是否重复。

💡 思考

如果攻击者现在尝试修改随机数:

http 复制代码
POST /api/transfer
X-Timestamp: 1722240000
X-Nonce: xyz789  <-- 修改了随机数
X-Signature: <原始的签名>  <-- 签名没变
Authorization: Bearer <合法的JWT>
Body: {"amount": 100, "to": "userB"}

服务端在校验时,会用新的 X-Nonce 重新计算签名,结果会发现计算出的签名和请求头里的 X-Signature 不一致,于是直接拒绝请求。

总结一下:

  • 只靠 JWT + 随机数:确实防不住篡改随机数的重放。
  • JWT + 随机数 + 请求签名:这才是完整的防重放方案。签名确保了请求的完整性,任何对请求内容的修改(包括随机数)都会导致签名校验失败。

相关推荐
Chengbei111 天前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
Inhand陈工1 天前
路由器专题二:有线为主,蜂窝备份——映翰通路由器链路备份功能详解
运维·网络·物联网·智能路由器·系统安全
Chengbei116 天前
SQL 注入挖洞插件 SQL-Injection-Scout 更新,响应 Diff 自动标记注入点,支持隐藏参数与多层 JSON 场景 FUZZ
前端·网络·sql·安全·web安全·json·系统安全
HackTwoHub8 天前
解锁 AI 红队全新玩法!Claude-Red 攻防 Skill 库,内置 SQLi、XXE、文件上传等 Web 专项 Skill,一键导入快速落地渗透实战
前端·人工智能·web安全·网络安全·自动化·系统安全
HackTwoHub11 天前
等级保护现场测评系统重磅更新,支持 AI 接入,可录入全品类资产清单,自动化巡检核查,批量导出测评归档文件
运维·人工智能·安全·web安全·网络安全·自动化·系统安全
程序员JerrySUN12 天前
Jetson 刷机深度解析:flash.sh vs l4t_initrd_flash.sh(含安全与磁盘加密对比)
linux·网络·arm开发·安全·系统安全
m0_7381207212 天前
AI安全实战系列(六):Lab06 Model Extraction——模型提取攻击
人工智能·安全·网络安全·语言模型·系统安全
m0_7381207214 天前
AI安全实战系列(二):Lab01 Foundations和Lab02 Prompt Injection
linux·运维·人工智能·安全·网络安全·系统安全
HackTwoHub15 天前
AntiDebug Mcp、AI逆向绕过前端,Hook 加密接口,抓取 Vue 路由漏洞,接入 MCP 让 AI 自动化挖掘前端漏洞
前端·vue.js·人工智能·安全·web安全·网络安全·系统安全