跨站请求伪造(CSRF)
字数 682 2025-11-13 16:40:23
跨站请求伪造(CSRF)
-
核心概念
CSRF是一种恶意攻击方式,攻击者诱使用户在已登录受信任网站的情况下,执行非本意的操作(如转账、修改密码)。其本质是冒用用户身份,而非窃取数据。例如,用户登录银行网站后,误点恶意链接,导致自动发起转账请求。 -
攻击原理
- 依赖条件:
- 用户已登录目标网站,浏览器保存了认证信息(如Cookie)。
- 用户访问恶意页面,该页面隐藏了伪造的请求(如通过自动提交表单)。
- 流程举例:
用户登录bank.com后,访问攻击者创建的页面。该页面包含:
浏览器自动携带已保存的Cookie发送请求,服务器误认为是用户合法操作。<form action="https://bank.com/transfer" method="POST"> <input type="hidden" name="amount" value="10000"> <input type="hidden" name="to" value="attacker"> </form> <script>document.forms[0].submit();</script>
- 依赖条件:
-
防御机制
- 同源策略限制:浏览器默认阻止跨域读取响应,但跨域请求仍可发送(需服务器配合防御)。
- Token验证:
服务器生成随机Token嵌入表单或请求头(如X-CSRF-Token),验证请求来源的合法性。 - SameSite Cookie属性:
设置Cookie的SameSite=Strict或Lax,限制跨站请求自动携带Cookie。 - 验证Referer/Origin头:
检查请求头中的来源域名,拒绝非白名单的请求。
-
现代应用场景的演变
- 单页应用(SPA)中,Token常通过加密签名与前端框架集成(如Axios自动附加)。
- OAuth 2.0等授权流程需显式处理CSRF,如通过
state参数绑定会话。
-
与XSS的关联与区别
- 区别:XSS利用用户对网站的信任,CSRF利用网站对用户浏览器的信任。
- 关联:XSS可能窃取Token,绕过CSRF防护,因此需综合防御。