Web安全漏洞:跨站请求伪造(CSRF)
字数 784 2025-11-18 16:10:53
Web安全漏洞:跨站请求伪造(CSRF)
-
基本定义
CSRF(Cross-Site Request Forgery)是一种恶意攻击方式。攻击者诱骗已登录用户在不知情的情况下,向当前已认证的Web应用提交非法操作请求。例如,用户登录银行网站后,在未退出的情况下访问恶意链接,该链接可能伪造一个转账请求并被浏览器自动发送,利用用户的登录状态完成非法操作。 -
攻击原理与必要条件
- 用户已登录受信任网站:会话凭证(如Cookie)有效。
- 用户触发恶意内容:通过点击链接、访问恶意页面等。
- 请求自动携带凭证:浏览器默认在同源请求中附加Cookie。
攻击者通过伪造请求(如隐藏的IMG标签、自动提交表单),利用浏览器的同源策略漏洞实现操作冒用。
-
典型攻击场景
假设银行转账接口为POST /transfer,参数为金额和收款账户。攻击者可构造以下恶意页面:<form action="https://bank.com/transfer" method="POST"> <input type="hidden" name="amount" value="1000"> <input type="hidden" name="to" value="attacker_account"> </form> <script>document.forms[0].submit();</script>用户访问该页面时,浏览器自动携带银行Cookie提交表单,完成转账。
-
防御机制
- Token验证:服务端生成随机Token嵌入表单或请求头,验证请求合法性。
- 同源检测:校验HTTP请求头中的
Origin或Referer字段是否来自可信域名。 - 双重Cookie验证:将Cookie值作为参数附加到请求中,服务端对比两者一致性。
- 关键操作强制二次认证:如短信验证码、重新输入密码。
-
现代框架的自动防护
主流Web框架(如Django、Spring Security)内置CSRF防护。例如Django通过中间件自动为表单添加Token,并验证POST请求的Token有效性。 -
与XSS的区别
- XSS:利用用户对网站的信任,在页面注入恶意脚本窃取信息。
- CSRF:利用网站对用户浏览器的信任,通过伪造请求执行操作。
两者可能结合使用,如通过XSS获取CSRF Token以绕过防护。