一文深入了解CSRF漏洞
字数 1522 2025-08-11 00:08:50
CSRF漏洞深入分析与防御指南
1. CSRF基础概念
1.1 定义
跨站请求伪造(Cross-site request forgery, CSRF/XSRF)是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。与XSS不同:
- XSS利用用户对指定网站的信任
- CSRF利用网站对用户浏览器的信任
本质:攻击者欺骗用户的浏览器向已认证网站发送请求,由于浏览器会携带认证信息(如Cookie),服务器会认为是用户自愿的操作。
1.2 攻击原理
- 用户登录Web应用并保持会话
- 服务器返回Session凭证保存在Cookie中
- 攻击者构造恶意请求并诱导用户访问
- 用户浏览器携带有效Cookie发送请求
- 服务器认为是合法用户操作并执行
2. CSRF攻击类型
2.1 GET型CSRF
特点:
- 最容易利用,攻击面最大
- 通过URL参数直接传递攻击指令
- 可通过img标签等方式自动触发
示例:
2.2 POST-表单型CSRF
特点:
- 需要构造自动提交的表单
- 比GET型利用稍复杂
- 常见于数据提交功能点
示例:
<form action=http://bank.example.com/csrf method=POST>
<input type="text" name="amount" value="1000" />
</form>
<script> document.forms[0].submit(); </script>
2.3 POST-JSON型CSRF
特点:
- 常见于RESTful API和前后端分离架构
- Content-Type为application/json
- 利用难度较高
利用方法:
- JSON转参数:尝试将JSON格式转为表单参数
- 闭合JSON:构造表单闭合JSON结构
- Ajax发起请求:使用XMLHttpRequest发送请求
- Flash+307跳转:利用Flash跨域特性
Ajax示例:
var xhr = new XMLHttpRequest()
xhr.open("POST", "http://test.example.com/csrf")
xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8")
xhr.withCredentials = true
xhr.send(JSON.stringify({"a":"b"}))
3. CSRF漏洞挖掘
3.1 常见攻击场景
- 修改个人信息
- 发送邮件/消息
- 资金操作(转账、支付)
- 创建管理员账户
- 任何需要认证的操作功能
3.2 验证方法
- 检查请求中是否缺少CSRF Token
- 尝试删除Referer头看请求是否仍能成功
- 构造POC验证漏洞存在性
快速验证步骤:
- 观察请求头和参数中是否有Token
- 删除Referer头测试
- 使用Burp生成POC测试
4. CSRF防御措施
4.1 令牌同步模式(STP)
原理:
- 服务器生成唯一随机Token嵌入表单
- 提交时验证Token有效性
- 攻击者无法获取Token导致验证失败
实现:
<input type="hidden" name="_csrf_token" value="随机唯一值">
注意事项:
- Token需保证随机性和唯一性
- 会话级Token可减轻服务器负担
- 需防止Token泄露
4.2 检查Referer字段
原理:
- 验证请求来源是否合法域名
- 拒绝非本域或空Referer请求
局限性:
- 依赖浏览器正确发送Referer
- 可能被篡改或禁用
- 隐私模式下可能不发送
4.3 自定义HTTP头
原理:
- 要求请求包含自定义头(如X-CSRF-Token)
- 通过JavaScript设置自定义头
- 非Ajax请求无法添加自定义头
4.4 验证码
原理:
- 关键操作需用户输入验证码
- 一次性验证码最安全
缺点:
- 影响用户体验
- 不适合频繁操作
4.5 SameSite Cookie属性
选项:
- Strict:完全禁止跨站携带Cookie
- Lax:允许部分安全跨站请求携带Cookie
特点:
- 浏览器原生支持
- 不影响同站请求
- 需考虑兼容性
5. 个人防护建议
- 使用隐私/无痕浏览器进行敏感操作
- 不随意点击不明链接
- 操作完成后及时登出
- 为不同网站使用不同密码
- 定期清理浏览器Cookie
6. 总结
CSRF攻击利用的是Web身份验证机制的缺陷 - 服务器无法区分请求是用户自愿发出还是被诱导发出。有效的防御需要结合多种措施,推荐使用CSRF Token+SameSite Cookie的组合方案,既能有效防御攻击,又能保证良好的用户体验。