基础漏洞系列——CSRF跨站请求伪造
字数 1003 2025-08-15 21:32:35
CSRF跨站请求伪造漏洞详解与防御
1. CSRF基本概念
跨站请求伪造(Cross-site request forgery, CSRF/XSRF)是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
核心特征:
- 利用网站对用户浏览器的信任
- 不同于XSS(利用用户对网站的信任)
- 攻击者无法直接获取用户账户控制权或信息
- 欺骗用户浏览器以用户名义执行操作
2. CSRF攻击原理
典型攻击流程:
- 用户登录目标网站(如银行网站),会话保持
- 用户访问恶意网站或包含恶意代码的页面
- 恶意页面包含对目标网站的请求(自动或诱导点击)
- 浏览器携带用户的认证信息(如cookie)发送请求
- 目标网站误认为是用户合法操作而执行
漏洞示例:
银行转账URL:
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
恶意代码:
3. CSRF漏洞检测方法
检测步骤:
-
无token和referer验证检测:
- 提交请求时删除referer字段,如果不报错则可能存在CSRF
- GET型构造恶意链接测试
- POST型构造自动提交表单测试
-
仅有referer验证检测:
- 尝试空referer
- 尝试域名伪造绕过(如验证
bylibrary.cn时,使用bylibrary.cn.baidu.com) - 在目标网站下发帖引导点击CSRF链接
4. CSRF漏洞利用技术
自动提交表单POC:
<html>
<head></head>
<body onload="form1.submit()">
<form id="form1" method="post" action="http://example.com">
<input type="hidden" name="sex" value="2" />
</form>
</body>
</html>
实际利用案例(途虎养车):
- 修改个人信息时抓包
- 使用Burp的CSRF测试插件生成HTML文件
- 修改用户名为攻击值并保存为HTML
- 受害者访问该HTML页面即触发修改
5. CSRF防御措施
1. 检测Referer字段
- 严格验证HTTP Referer头
- 防止可绕过的简单验证
2. 添加Token校验
- 使用伪随机token参数
- 后端验证token有效性
Token验证原理:
- 服务器生成唯一token与用户会话关联
- Token随表单一起发送给客户端
- 用户提交表单时携带token
- 服务器验证token是否匹配当前会话
3. 其他防御措施:
- 关键操作使用POST而非GET
- 增加二次验证(如短信验证码)
- 设置SameSite Cookie属性
6. 总结
CSRF是一种利用网站对用户浏览器信任的攻击方式,通过构造恶意请求让已认证用户在不知情的情况下执行非预期操作。有效防御需要结合Referer检查、Token验证等多种措施,关键业务操作应实施更严格的身份验证机制。