共计 1923 个字符,预计需要花费 5 分钟才能阅读完成。
Token 在 Web 安全中的作用与重放攻击的危害
Token 是现代 Web 应用中常见的安全机制,主要用于身份验证和防止跨站请求伪造(CSRF)。Token 通常是一串随机生成的字符串,服务器在用户登录后生成并返回给客户端,后续请求中客户端需要携带这个 Token 以证明身份合法性。

Token 重放攻击(Token Replay Attack)是指攻击者截获合法用户的 Token 后,在 Token 有效期内重复使用该 Token 进行恶意操作。这种攻击的危害包括但不限于:
- 绕过身份验证机制
- 执行未授权操作
- 窃取敏感数据
- 破坏数据完整性
Burp Suite 重放 Token 攻击实战
准备工作
- 安装 Burp Suite(社区版或专业版)
- 配置浏览器代理(通常为 127.0.0.1:8080)
- 确保目标网站使用 Token 机制
具体操作步骤
- 拦截包含 Token 的请求
使用 Burp 的 Proxy 功能拦截目标网站的 HTTP 请求,找到包含认证 Token 的请求(通常在 Authorization 头或请求体中)。
- 发送到 Repeater 模块
右键点击拦截到的请求,选择 ”Send to Repeater”。
- 重放请求
在 Repeater 模块中,可以直接修改请求参数后点击 ”Send” 按钮多次发送相同请求,观察服务器响应。
- 分析结果
如果服务器对相同 Token 的多次请求都返回成功,说明存在 Token 重放漏洞。
防御方案
基于时间的 Token 失效机制
以下是 Python 实现的示例代码:
from datetime import datetime, timedelta
import secrets
# 生成带时间戳的 Token
def generate_token():
token = secrets.token_hex(16)
expiry = datetime.now() + timedelta(minutes=30)
return f"{token}:{expiry.timestamp()}"
# 验证 Token
def verify_token(token_str):
try:
token, expiry = token_str.split(':')
if datetime.now().timestamp() > float(expiry):
return False # Token 已过期
return True
except:
return False # Token 格式错误
Token 与用户会话绑定
以下是 Java 实现的示例代码:
import javax.servlet.http.HttpSession;
public class TokenValidator {public static boolean validateToken(String clientToken, HttpSession session) {String serverToken = (String) session.getAttribute("CSRF_TOKEN");
if(serverToken == null || !serverToken.equals(clientToken)) {return false;}
// 验证成功后使 Token 失效
session.removeAttribute("CSRF_TOKEN");
return true;
}
}
避坑指南
常见错误配置及解决方案
- Token 未绑定会话
- 问题:Token 不与特定用户会话关联
-
解决:在生成 Token 时加入用户唯一标识
-
Token 无过期时间
- 问题:Token 永久有效
-
解决:设置合理的过期时间(通常 5 -30 分钟)
-
Token 未加密传输
- 问题:明文传输 Token
-
解决:始终使用 HTTPS 协议
-
Token 可预测
- 问题:使用简单序列生成 Token
- 解决:使用加密安全的随机数生成器
CSRF 防护与 Token 重放的关联
CSRF(跨站请求伪造)防护通常也依赖 Token 机制,但 CSRF Token 和认证 Token 有不同的安全要求。CSRF Token 不需要每次变化,而认证 Token 通常需要更严格的保护措施。根据 OWASP 建议,对于敏感操作应使用两种不同的 Token 机制。
思考题
如何设计防重放的分布式 Token 系统?考虑以下因素:
- 分布式环境下的时钟同步
- Token 存储和验证的性能
- 高并发场景下的处理
- 失效 Token 的清理机制
建议从以下几个方面思考解决方案:
- 使用中心化的 Token 存储服务(如 Redis)
- 实现基于 JWT 的自验证 Token
- 考虑引入 nonce 机制
- 设计合理的 Token 失效策略
总结
Token 重放攻击是 Web 安全中的常见威胁,通过 Burp Suite 可以有效地测试应用对此类攻击的防护能力。防御 Token 重放需要综合运用时间戳、会话绑定、加密传输等多种技术。开发者应遵循 OWASP 的安全规范,定期进行安全测试,确保 Token 机制的正确实现。
