跨站请求伪造(CSRF)漏洞
- [1. 漏洞原理](#1. 漏洞原理)
- [2. 漏洞危害](#2. 漏洞危害)
- [3. 漏洞修复](#3. 漏洞修复)
1. 漏洞原理
CSRF攻击的核心是利用用户在当前网站(如银行、邮箱、社交网络)的登录状态。浏览器会自动携带用户的Cookie等认证信息发送请求,而攻击者通过构造一个恶意链接或页面,诱骗已经登录的用户去点击或访问,从而让用户的浏览器在用户不知情的情况下向目标网站发送一个请求。对于服务器来说,这个请求看起来就是用户自己发出的合法请求。
攻击流程:
- 受害者登录 bank.example,获得会话 cookie。
- 受害者在登录状态下访问攻击者页面 evil.com。
- evil.com 含有隐藏表单/图片/JS,向 bank.example 发起转账请求(浏览器会带上 bank.example 的 cookie)。
- bank.example 接收到请求并以为是受害者本人操作,于是执行转账。
2. 漏洞危害
一般来讲,现代Web开发框架(如Spring Security, Django, Laravel等)都内置了完善的CSRF防护机制(如Anti-CSRF Token),但也有例外情况。
CSRF的危害程度完全取决于目标网站的功能。功能越核心,危害越大。
- 轻度危害:篡改用户数据
- 修改个人信息:更改用户的昵称、签名、头像、密码、安全邮箱等。
- 社交网络操作:在微博/X上以用户身份发布一条内容、点赞、关注/取消关注某人。
- 电商网站操作:将商品加入购物车、添加收货地址。
- 中度危害:造成直接经济损失或隐私泄露
- 网上银行/支付平台:攻击者可以构造一个请求,将用户账户中的资金转移到攻击者控制的账户。虽然通常有短信验证等二次验证,但如果操作金额较小或系统设计存在缺陷,仍然可能成功。
- 电商平台:使用用户的账户和保存的支付信息,购买虚拟商品(如礼品卡、游戏点券)并发送到攻击者邮箱,或者购买实体商品寄到指定地址。
- 企业内网/后台系统:如果攻击者能诱骗企业内部员工点击链接,可能会以员工权限修改系统配置、添加低级管理员账户等。
- 重度危害:完全接管账户或系统
- 修改密码/邮箱:如果网站允许通过一个简单的请求就修改账户的密码或绑定邮箱,那么攻击者可以直接将账户锁定,然后通过"找回密码"功能完全接管该账户。
- 管理员账户操作:这是危害最大的情况。如果网站的管理员账户遭受CSRF攻击,后果是灾难性的。
- 攻击者可以添加一个新的管理员用户,从而永久性地控制整个网站后台。
- 可以执行任意SQL语句,导致数据泄露、篡改或删除。
- 可以上传Webshell,从而完全控制服务器。
3. 漏洞修复
++1、使用 CSRF Tokens++
- 在用户会话(Session)中生成一个随机、不可预测的令牌(Token)。
- 在渲染表单或发起敏感请求的页面时,将这个Token作为一个隐藏字段或自定义HTTP头嵌入其中。
- 当用户提交请求时,服务器验证请求中的Token是否与用户Session中存储的Token一致。如果缺失或不匹配,则拒绝请求。
++2、++ ++SameSite Cookie++
SameSite=Strict:最严格。浏览器只会在同一站点的请求中携带Cookie。这意味着用户从其他网站点击链接过来,首次请求不会携带Cookie,从而完全杜绝CSRF。
++3、验证Referer头,判断请求是否是从当前域发出的++