
1) 【一句话结论】:CSRF攻击通过利用用户已登录网站的会话Cookie,伪造HTTP请求诱导服务器执行非授权操作,核心是绕过服务器对请求来源的验证。
2) 【原理/概念讲解】:会话Cookie是服务器为用户登录状态创建的标识(如JSESSIONID),浏览器自动携带。同源策略允许跨域请求但允许Cookie传输。攻击者构造恶意页面(如社交广告),当用户访问时,页面嵌入隐藏表单或iframe,发送伪造的POST请求。由于浏览器自动带上Cookie,服务器误判为用户操作。类比:你登录银行后,浏览器保存了登录凭证(会话Cookie),现在一个被坏人控制的网站让你“点击”一个链接(其实是自动提交表单),坏人利用你的凭证向银行转账,而你不知情。
3) 【对比与适用场景】:
| 特性 | CSRF(跨站请求伪造) | XSS(跨站脚本攻击) |
|---|---|---|
| 定义 | 伪造用户请求,诱导服务器执行操作 | 注入恶意脚本,在用户浏览器执行 |
| 核心机制 | 利用会话Cookie,自动携带 | 注入脚本,用户点击后执行 |
| 攻击条件 | 用户已登录目标网站 | 用户访问包含恶意脚本的页面 |
| 防护重点 | 验证请求的Token或来源 | 输入验证、输出编码 |
| 使用场景 | 转账、修改资料等需要权限的操作 | 窃取信息、执行恶意操作(如盗取Cookie) |
4) 【示例】:用户登录银行后,访问一个恶意广告(来自恶意网站),广告页面代码:
<form action="https://bank.com/transfer" method="POST" style="display:none;">
<input type="hidden" name="amount" value="10000">
<input type="hidden" name="to" value="badguy">
<input type="hidden" name="csrf_token" value="abc123"> <!-- 前端动态生成Token -->
</form>
<script>document.forms[0].submit();</script>
请求头:
POST /transfer HTTP/1.1
Host: bank.com
Cookie: JSESSIONID=abc123; csrf_token=abc123
Content-Type: application/x-www-form-urlencoded
Content-Length: 68
amount=10000&to=badguy&csrf_token=abc123
银行后端验证token是否与用户会话匹配(通过JSESSIONID关联),匹配则转账。
5) 【面试口播版答案】:CSRF攻击是利用用户已登录的会话Cookie,伪造HTTP请求诱导非授权操作。比如用户登录银行后,访问一个恶意广告,广告页面发送隐藏的POST请求到转账接口,浏览器自动带Cookie导致银行执行转账。防御需前端加CSRF Token(每个请求带随机token),后端验证token。比如360浏览器内置CSRF防护,会自动生成token并存储,请求时检查token有效性,拦截可疑请求。具体来说,前端在表单或AJAX请求中添加token(如<input type="hidden" name="csrf_token" value="abc123">),后端验证该token是否与用户会话匹配,不匹配则拒绝。360安全卫士或浏览器通过内置的“智能安全检测”模块,分析请求来源(是否来自恶意网站)和token有效性(是否与用户会话关联),拦截或提示用户风险。同时,360会结合会话劫持防护,比如定期更新会话令牌,降低被劫持后CSRF攻击的成功率。
6) 【追问清单】:
7) 【常见坑/雷区】: