Web安全系列 -- Csrf漏洞
字数 1506 2025-08-29 08:31:53

CSRF漏洞详解与防御

1. CSRF漏洞概述

CSRF (Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或Session Riding,通常缩写为CSRF或XSRF。

1.1 与XSS的区别

  • XSS:利用站点内的信任用户,在用户浏览器中执行恶意脚本
  • CSRF:通过伪装来自受信任用户的请求来利用受信任的网站

1.2 危险性

CSRF攻击被认为比XSS更具危险性,原因包括:

  • 防范资源相对稀少
  • 防御难度较大
  • 攻击效果直接

2. CSRF漏洞原理

2.1 成因

  • 网站的cookie在浏览器中不会过期
  • 只要不关闭浏览器或退出登录,访问网站时都会保持登录状态
  • 攻击者发送构造好的CSRF脚本或包含CSRF脚本的链接
  • 可能执行用户不想做的操作(如添加账号等)

2.2 攻击依赖条件

  1. 攻击者了解受害者所在的站点
  2. 目标站点具有持久化授权cookie或受害者具有当前会话cookie
  3. 目标站点没有对用户在网站行为的第二授权

3. CSRF攻击危害

攻击者盗用用户身份,以用户名义发送恶意请求,可导致:

  • 以用户名义发送邮件、发消息
  • 盗取用户账号
  • 购买商品
  • 虚拟货币转账
  • 个人隐私泄露
  • 财产安全问题

4. CSRF攻击示例

4.1 基本攻击流程

  1. 找到目标站点(示例中使用WordPress环境)
  2. 在用户管理界面测试(如添加用户功能)
  3. 使用Burp Suite截取请求
  4. 利用Burp的CSRF插件生成CSRF.html文件
  5. 修改关键值(如用户名)避免重复
  6. 在浏览器中执行,验证攻击效果

4.2 高级攻击:结合XSS

  1. 了解发送的数据包内容
  2. 使用XSS平台创建CSRF项目
  3. 编写恶意代码并存入目标站点(通过存储型XSS漏洞)
  4. 当管理员查看留言时执行危险代码
  5. 自动发送添加用户的请求

5. CSRF攻击工具

5.1 Burp Suite

  • 截断数据包
  • 构造CSRF漏洞PoC
  • 简单方便的工具

5.2 CSRFTester-1.0

  • 专门针对CSRF漏洞
  • 可构造多种样式的PoC
  • 使用方法:
    1. 双击bat文件运行
    2. 设置浏览器8008代理
    3. 点击start获取通过的数据包
    4. 在最下方构造需要的PoC加以利用

6. CSRF攻击技术细节

6.1 攻击方式

  • 利用IMG标签触发GET请求
  • 欺骗用户浏览器发送HTTP请求给目标站点
  • 利用网站对用户标识的信任

6.2 常见攻击场景

  1. 银行转账操作
  2. 用户权限修改
  3. 表单提交操作
  4. 社交网络中的状态更新
  5. 电子商务中的购买操作

7. CSRF防御措施

7.1 服务器端防御

  1. 验证HTTP Referer字段:检查请求是否来自合法源
  2. 使用CSRF Token
    • 服务器生成随机Token
    • 包含在表单或HTTP头中
    • 每次请求验证Token有效性
  3. SameSite Cookie属性
    • 设置Cookie的SameSite属性为Strict或Lax
    • 限制第三方上下文中的Cookie发送
  4. 双重验证:对敏感操作要求二次验证

7.2 客户端防御

  1. 避免自动提交表单
  2. 敏感操作后手动注销
  3. 使用浏览器扩展:如CSRF防护插件

8. 开发实践建议

  1. 对所有状态修改操作使用POST请求
  2. 实现CSRF Token机制
  3. 对敏感操作增加验证步骤
  4. 定期审计代码中的表单处理逻辑
  5. 使用安全框架提供的CSRF防护功能

9. 总结

CSRF攻击利用网站对用户浏览器的信任,通过伪装合法请求执行恶意操作。防御CSRF需要服务器和客户端的共同努力,核心在于验证请求的真实性和来源合法性。开发者应当将CSRF防护作为Web应用安全的基本要求,结合多种防御措施构建完整的安全体系。

CSRF漏洞详解与防御 1. CSRF漏洞概述 CSRF (Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或Session Riding,通常缩写为CSRF或XSRF。 1.1 与XSS的区别 XSS :利用站点内的信任用户,在用户浏览器中执行恶意脚本 CSRF :通过伪装来自受信任用户的请求来利用受信任的网站 1.2 危险性 CSRF攻击被认为比XSS更具危险性,原因包括: 防范资源相对稀少 防御难度较大 攻击效果直接 2. CSRF漏洞原理 2.1 成因 网站的cookie在浏览器中不会过期 只要不关闭浏览器或退出登录,访问网站时都会保持登录状态 攻击者发送构造好的CSRF脚本或包含CSRF脚本的链接 可能执行用户不想做的操作(如添加账号等) 2.2 攻击依赖条件 攻击者了解受害者所在的站点 目标站点具有持久化授权cookie或受害者具有当前会话cookie 目标站点没有对用户在网站行为的第二授权 3. CSRF攻击危害 攻击者盗用用户身份,以用户名义发送恶意请求,可导致: 以用户名义发送邮件、发消息 盗取用户账号 购买商品 虚拟货币转账 个人隐私泄露 财产安全问题 4. CSRF攻击示例 4.1 基本攻击流程 找到目标站点(示例中使用WordPress环境) 在用户管理界面测试(如添加用户功能) 使用Burp Suite截取请求 利用Burp的CSRF插件生成CSRF.html文件 修改关键值(如用户名)避免重复 在浏览器中执行,验证攻击效果 4.2 高级攻击:结合XSS 了解发送的数据包内容 使用XSS平台创建CSRF项目 编写恶意代码并存入目标站点(通过存储型XSS漏洞) 当管理员查看留言时执行危险代码 自动发送添加用户的请求 5. CSRF攻击工具 5.1 Burp Suite 截断数据包 构造CSRF漏洞PoC 简单方便的工具 5.2 CSRFTester-1.0 专门针对CSRF漏洞 可构造多种样式的PoC 使用方法: 双击bat文件运行 设置浏览器8008代理 点击start获取通过的数据包 在最下方构造需要的PoC加以利用 6. CSRF攻击技术细节 6.1 攻击方式 利用IMG标签触发GET请求 欺骗用户浏览器发送HTTP请求给目标站点 利用网站对用户标识的信任 6.2 常见攻击场景 银行转账操作 用户权限修改 表单提交操作 社交网络中的状态更新 电子商务中的购买操作 7. CSRF防御措施 7.1 服务器端防御 验证HTTP Referer字段 :检查请求是否来自合法源 使用CSRF Token : 服务器生成随机Token 包含在表单或HTTP头中 每次请求验证Token有效性 SameSite Cookie属性 : 设置Cookie的SameSite属性为Strict或Lax 限制第三方上下文中的Cookie发送 双重验证 :对敏感操作要求二次验证 7.2 客户端防御 避免自动提交表单 敏感操作后手动注销 使用浏览器扩展 :如CSRF防护插件 8. 开发实践建议 对所有状态修改操作使用POST请求 实现CSRF Token机制 对敏感操作增加验证步骤 定期审计代码中的表单处理逻辑 使用安全框架提供的CSRF防护功能 9. 总结 CSRF攻击利用网站对用户浏览器的信任,通过伪装合法请求执行恶意操作。防御CSRF需要服务器和客户端的共同努力,核心在于验证请求的真实性和来源合法性。开发者应当将CSRF防护作为Web应用安全的基本要求,结合多种防御措施构建完整的安全体系。