每日漏洞 | 跨站请求伪造
字数 1188 2025-08-18 11:38:32
跨站请求伪造(CSRF)漏洞详解与检测方法
漏洞描述
跨站请求伪造(CSRF)是一种利用Web应用程序HTTP无状态特性进行攻击的安全漏洞。由于Web应用使用会话机制(如Cookie)来识别用户,当用户与网站建立连接后,后续请求都会自动携带该Cookie。攻击者可以利用这一特性,从第三方站点发起对目标站点的请求,这些请求会带上用户的合法Cookie,导致服务器误认为是用户自愿执行的操作。
漏洞检测方法
1. 检测是否可跨站
检测步骤:
- 正常提交请求(如转账操作),确认操作成功
- 检查请求头中的Referer字段(记录请求来源)
- 删除Referer字段后重放请求
- 观察操作是否仍然成功
判断标准:
- 如果删除Referer后操作仍成功,说明服务器未验证请求来源,存在"跨站"可能
- 如果操作失败,说明服务器可能进行了来源验证
2. 检测是否可伪造请求
检测步骤:
- 分析请求参数(如account、amount、action、token等)
- 尝试删除或修改关键参数(如token)
- 重放请求观察响应
- 测试token是否可重复使用
判断标准:
- 如果关键参数可缺失或可预测,则存在伪造风险
- 如果token可重复使用(不随请求变化),则存在安全缺陷
- 如果token每次必须更新且不可预测,则安全性较高
3. 综合验证CSRF漏洞
验证方法:
- 使用抓包工具生成CSRF的POC(概念验证代码)
- 创建包含恶意请求的HTML页面
- 在已登录目标网站的同浏览器中打开该HTML
- 观察是否成功执行非意愿操作
漏洞修复方案
1. 请求来源验证
- 检查HTTP头中的Referer字段
- 验证请求是否来自合法域名
- 局限性:
- 不能防御站内发起的CSRF
- Referer可能被伪造或缺失
2. Token验证机制
- 在请求中添加不可预测的Token
- 服务器验证Token的有效性
- 最佳实践:
- 使用一次性Token
- 及时更新Token(如每次请求后更新)
- 将Token存储在非Cookie位置(如表单隐藏字段)
3. 图形验证码
- 对敏感操作要求输入验证码
- 优缺点:
- 安全性较高
- 可能影响用户体验
实际工作中的检测技巧
-
Token检测优先级:
- 先测试Token是否可重复使用
- 再测试Token是否可缺失或伪造
-
检测顺序优化:
- 若Token可重复使用,重点检测"跨站"可能性
- 若Token不可伪造,仍需检测其更新机制是否完善
-
风险意识:
- 即使部分防护存在(如Referer检查),也要评估绕过可能性
- 对Token机制的缺陷应零容忍,及时修复
总结
CSRF漏洞的核心在于利用Web的身份验证机制缺陷,通过检测"跨站"和"请求伪造"两个维度可有效识别风险。修复时应采用多层次防御策略,特别是正确实现Token机制是防护CSRF的最有效方法。安全人员在实际检测中应注重测试各种边界条件,确保防护措施无懈可击。