CSRF漏洞技术解析与实战防御指南
一、CSRF漏洞简介
跨站请求伪造(Cross-Site Request Forgery, CSRF) 是一种利用用户在已认证状态下的身份,诱导其执行非预期操作的攻击方式。攻击者通过构造恶意请求,诱骗用户浏览器向目标网站发送请求,从而以用户身份完成敏感操作(如修改密码、转账等)。其危害性在于攻击过程对用户透明,且无需窃取用户凭证。
二、CSRF攻击前提条件
1. 用户已登录目标系统:受害者需在目标网站保持登录状态(如Cookie未过期)。
2. 目标接口无随机化校验:请求参数可预测,且未使用CSRF Token、Referer验证等防护机制。
3. 请求可被伪造:攻击者能够构造出合法的请求参数(如修改密码的URL或表单字段)。
三、CSRF攻击原理与类型分析
攻击原理
- 浏览器自动携带Cookie:当用户访问恶意页面时,浏览器会自动将目标站点的Cookie附加到请求中,使服务器误认为是用户主动操作。
- 请求伪造链路:攻击者通过钓鱼邮件、恶意链接或第三方网站嵌入攻击代码,触发用户浏览器发送伪造请求。
攻击类型
1. GET型CSRF
<img src="https://target.com/change-password?newpass=attacker123" width="0" height="0">
通过图片标签自动发送GET请求,无需用户交互。
2. POST型CSRF
<form action="https://target.com/transfer" method="POST"><input type="hidden" name="amount" value="10000"><input type="hidden" name="account" value="attacker_account"></form><script>document.forms[0].submit();</script>
隐藏表单配合JavaScript自动提交,实现POST请求伪造。
3. 基于JSON的CSRF
需结合CORS漏洞或Flash插件实现,利用Content-Type为text/plain绕过部分校验。
四、CSRF漏洞挖掘实战
手动测试步骤
1. 目标接口分析:使用Burp Suite抓取敏感操作请求(如修改邮箱、转账)。
2. 校验防护机制:检查是否存在以下防护:
- CSRF Token(是否随机化、是否绑定会话)。
- Referer头验证(是否校验来源域名)。
3. PoC构造:尝试移除Token或修改Referer,观察请求是否仍被执行。
工具辅助
- CSRF PoC Generator(Burp插件):自动生成攻击代码模板。
- OAST(Out-of-Band Application Security Testing):通过DNS或HTTP回调验证盲CSRF。
五、CSRF漏洞防御实战
1. CSRF Token
- 服务端生成随机Token,绑定用户会话,并在表单或请求头中提交。
- 验证逻辑:对比请求中的Token与服务器存储的是否一致。
2. SameSite Cookie属性
设置Cookie的SameSite=Strict或Lax,限制第三方上下文的Cookie携带:
Set-Cookie: sessionid=abc123; SameSite=Strict; Secure; HttpOnly
3. 双重验证
对敏感操作(如转账)要求二次身份确认(短信验证码、密码复核)。
4. Referer校验
验证请求头中的Referer是否来源于合法域名,但需注意隐私兼容性问题。
六、CSRF与SSRF的关联与区别
- SSRF(服务端请求伪造):攻击者利用服务端发起非法内网请求,目标为服务器自身或内网资源。
- 核心差异:CSRF依赖用户身份,SSRF利用服务端漏洞;防御时需分别关注客户端校验与服务端请求过滤。
七、总结
CSRF漏洞的防御关键在于打破“请求可预测性”与“身份绑定”的漏洞链。通过Token机制、Cookie策略和业务逻辑加固,可有效抵御此类攻击。安全开发中应遵循“不信任客户端输入”原则,结合自动化工具与人工审计,全面覆盖攻击面。