第一章:JavaScript CSRF防护概述
跨站请求伪造(CSRF)是一种常见的Web安全漏洞,攻击者利用用户在已认证的会话中发起非预期的请求,从而执行未经授权的操作。在现代前端应用广泛使用JavaScript进行异步通信的背景下,CSRF风险尤为突出,尤其是在单页应用(SPA)与后端API交互频繁的场景中。
CSRF攻击的基本原理
攻击者诱导用户点击恶意链接或访问恶意页面,利用浏览器自动携带Cookie的特性,向目标网站发送伪造的HTTP请求。由于请求附带了用户的认证凭据,服务器误认为该请求是合法操作。
前端常见的防护策略
- 使用Anti-CSRF Token:服务器生成一次性令牌,前端在每次请求时将其放入请求头
- SameSite Cookie属性:设置Cookie的
SameSite=Strict或SameSite=Lax以限制跨站发送 - 双重提交Cookie:将CSRF Token同时存储在Cookie和请求头中,由前端同步提交
基于Token的防护实现示例
服务器在响应首屏HTML或登录接口时注入CSRF Token,前端通过JavaScript读取并附加到后续请求中:
// 从meta标签获取CSRF Token
const csrfToken = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
// 配置axios默认请求头
axios.defaults.headers.common['X-CSRF-Token'] = csrfToken;
// 所有后续请求将自动携带该头部
axios.post('/api/update-profile', { name: 'Alice' })
.then(response => console.log('更新成功'));
该机制依赖前后端协同:服务器验证请求头中的Token是否与会话中存储的一致,有效阻断伪造请求。
主流框架集成支持
| 框架 | CSRF防护方案 |
|---|
| React | 结合Redux或Context管理Token,拦截器注入请求头 |
| Vue | 使用Axios插件或Pinia状态管理统一处理 |
| Angular | 内置HttpClient拦截器支持XSRF模块 |
第二章:CSRF攻击原理与前端盲区剖析
2.1 CSRF攻击的底层机制与请求伪造过程
CSRF攻击的本质
跨站请求伪造(CSRF)利用用户在已认证的Web应用中发起非预期的请求。攻击者诱导用户点击恶意链接或访问恶意页面,从而以用户身份执行非法操作。
典型请求伪造流程
- 用户登录目标网站,维持有效会话(如携带Cookie)
- 用户在未退出状态下访问攻击者构造的恶意页面
- 恶意页面自动提交表单或发送请求至目标站点
- 浏览器携带用户凭证(如Cookie)发送请求,服务器误认为合法操作
示例代码:伪造转账请求
<form action="https://bank.com/transfer" method="POST">
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="to" value="attacker" />
<script>document.forms[0].submit();</script>
</form>
该HTML片段在用户加载页面时自动提交转账请求。由于请求发往银行系统且用户已登录,浏览器自动附带认证Cookie,导致服务器误判为合法操作。参数
amount和
to被预设为攻击者控制的值,完成资金转移。
2.2 前后端分离架构中的CSRF传播路径
在前后端分离架构中,前端通常通过独立域名部署,依赖API接口与后端通信。这种解耦结构改变了传统CSRF的攻击路径,使得攻击者需精准定位会话维持机制。
认证状态的传递方式
现代应用多采用Token机制(如JWT)替代Cookie进行身份验证。若仍使用Session Cookie,且未设置
SameSite属性,则存在跨站请求伪造风险。
典型漏洞场景
- 前端未校验请求来源,后端也未启用CSRF Token
- CORS配置宽松,允许任意域发起凭证请求
- 敏感操作仅依赖Cookie自动携带进行鉴权
POST /api/transfer HTTP/1.1
Host: backend.example.com
Cookie: sessionid=abc123
Content-Type: application/json
{"amount": 1000, "to": "attacker"}
该请求在用户已登录状态下可被恶意页面诱导发送,后端若仅凭Cookie判断身份,即构成CSRF攻击。关键在于缺乏同步Token或Origin校验机制。
2.3 同源策略局限性与跨站请求的真实触发场景
同源策略是浏览器安全的基石,但其防护边界存在特定绕过场景。例如,HTML 标签如 `