怎么防重放攻击
1. 使用一次性令牌 (Nonce) 或时间戳
这是最常见也最有效的防范手段。核心思想是确保每个请求都是唯一的,即使被截获也无法再次使用
- 一次性令牌 (Nonce): 这是一个随机生成的、只使用一次的字符串
- 工作原理: 服务器在发送给客户端的页面中嵌入一个隐藏的 Nonce。客户端在发送请求时,必须将这个 Nonce 包含在内。服务器端会验证这个 Nonce 是否被使用过。如果 Nonce 数据库中已存在,则拒绝该请求
- 优点: 安全性高,能有效防止攻击者重复使用旧的请求
- 缺点: 需要在服务器端维护一个 Nonce 数据库,增加了状态管理的复杂性
- 时间戳 (Timestamp): 在请求中加入当前时间戳
- 工作原理: 客户端在发送请求时,将当前时间戳也作为参数发送。服务器接收到请求后,会检查时间戳是否在设定的有效时间窗口内(例如,30秒)。如果时间戳过期,则拒绝请求
- 优点: 实现简单,不依赖于 Nonce 数据库
- 缺点: 依赖于客户端和服务器时间的同步,如果两者时间差异较大,可能会导致正常请求被拒绝