当前位置: 首页 > news >正文

CSRF 攻击

CSRF 攻击

CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的Web安全攻击手段。攻击者通过诱骗用户在已登录的Web应用中执行非本意操作,从而以用户身份执行恶意请求(如转账、改密码等)。

一、核心概念与攻击原理

用户可信网站恶意网站1. 正常登录(获得Cookie)2. 访问恶意页面3. 自动发送伪造请求(携带用户Cookie)4. 执行恶意操作用户可信网站恶意网站
1. 攻击本质
  • 利用用户身份:攻击者借助用户已登录的身份,在目标网站执行非预期操作。
  • 隐式身份验证:依赖浏览器自动携带的 Cookie、Session 等身份凭证。
2. 攻击条件
  • 用户已登录目标网站(存在有效会话)。
  • 目标网站存在未防护的状态修改操作(如转账、删除数据)。
  • 攻击者构造恶意请求,诱导用户访问(如通过邮件、钓鱼链接)。
3. 典型场景
  • 银行转账:攻击者诱导用户在已登录网银的浏览器中访问恶意页面,伪造转账请求。
  • 社交平台:伪造发布内容、关注操作等。
  • 企业系统:删除数据、修改权限等敏感操作。

二、攻击方式分类

1. GET 请求攻击
<!-- 隐藏图片,自动触发请求 -->
<img src="https://bank.com/transfer?to=attacker&amount=10000" style="display:none">
2. POST 请求攻击
<form action="https://bank.com/transfer" method="POST" id="maliciousForm"><input type="hidden" name="to" value="attacker"><input type="hidden" name="amount" value="10000">
</form>
<script>document.getElementById('maliciousForm').submit();
</script>
3. CSRF 与 JavaScript
  • 同源策略限制:攻击者无法直接读取响应内容,但可触发请求。
  • JSONP 漏洞:若接口支持 JSONP 且未验证来源,可能被利用。

三、防护措施

1. 同源验证(Origin/Referer)
  • 验证请求来源:检查请求头中的 OriginReferer 字段。
  • 适用场景:简单网站,无复杂跨域需求。

示例(Java)

String referer = request.getHeader("Referer");
if (referer == null || !referer.startsWith("https://trusted-domain.com")) {response.sendError(HttpServletResponse.SC_FORBIDDEN);return;
}
2. CSRF Token
  • 生成随机令牌:服务器为每个用户会话生成唯一 Token。
  • 表单 / 请求携带:将 Token 嵌入表单或请求头中。
  • 服务器验证:处理请求时验证 Token 的有效性。

示例(HTML 表单)

<form action="/transfer" method="POST"><input type="hidden" name="_csrf" value="1234567890abcdef"><button type="submit">转账</button>
</form>
3. SameSite Cookie 属性
  • Strict:完全禁止第三方 Cookie。
  • Lax:允许部分安全的跨站请求(如链接跳转)携带 Cookie。
  • None:允许所有跨站请求携带 Cookie(需配合 Secure 属性)。

示例(设置 Cookie)

Cookie cookie = new Cookie("session_id", "123456");
cookie.setHttpOnly(true);
cookie.setSecure(true);
cookie.setSameSite("Strict"); // 严格模式
response.addCookie(cookie);
4. 双重 Cookie 验证
  • 生成随机值:服务器在 Cookie 和表单中设置相同随机值。
  • 客户端验证:JavaScript 从 Cookie 读取值并添加到请求头。
  • 服务器对比:验证两个值是否一致。

示例(JavaScript)

function getCookie(name) {const value = `; ${document.cookie}`;const parts = value.split(`; ${name}=`);if (parts.length === 2) return parts.pop().split(';').shift();
}// 发送请求时添加 X-CSRF-Token 头
fetch('/api/action', {headers: {'X-CSRF-Token': getCookie('csrf_token')}
});

四、框架防护实现

1. Spring Security
// 启用 CSRF 防护(默认开启)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());}
}

五、测试与漏洞检测

1. 手动测试
  • 构造恶意请求:使用 Burp Suite 等工具拦截并修改请求。
  • 验证防护机制:尝试在无 Token 或错误 Token 的情况下提交请求。
2. 自动化工具
  • OWASP ZAP:检测 CSRF 漏洞并生成报告。
  • W3AF:扫描网站安全漏洞,包括 CSRF。

六、与其他攻击的对比

攻击类型核心机制防护重点
CSRF利用用户已登录身份验证请求来源、Token 机制
XSS注入恶意脚本执行输入过滤、输出编码
SQL 注入利用参数注入恶意 SQL参数化查询、输入验证
SSRF伪造服务器发起内部请求限制请求范围、验证目标地址
http://www.dtcms.com/a/328070.html

相关文章:

  • 【机器学习】什么是DNN / MLP(全连接深度神经网络, Deep Neural Network / Multilayer Perceptron)?
  • 【Python】支持向量机SVM
  • Web攻防-业务逻辑篇Fuzz技术数据并发条件竞争JS挖掘参数盲猜Turbo插件SRC
  • c#联合Halcon进行OCR字符识别(含halcon-25.05 百度网盘)
  • 下一代防火墙部署
  • TF-IDF 红楼梦关键词提取
  • 全文深度剖析国产化数据库达梦之备份恢复体系
  • nurbs曲线的matlab
  • RabbitMQ面试精讲 Day 20:RabbitMQ压测与性能评估
  • Hystrix核心内容
  • JUC 面试知识点大纲
  • Notepad++插件开发实战
  • 【从0带做】基于Springboot3+Vue3的校园表白墙系统
  • Java进阶学习之不可变集合
  • 【实时Linux实战系列】基于RFID的实时资产追踪系统
  • 矩形前缀和
  • 【GESP】C++一级知识点之【集成开发环境】
  • 【DL】深层神经网络
  • GraphQL 原理、应用与实践指南
  • MDD-Net:通过相互Transformer进行多模态抑郁症检测
  • Cookies和Sessions
  • 视觉大模型评测数据集
  • [SC]如何使用sc_semaphore实现对共享资源的访问控制
  • LeetCode 2787.将一个数字表示成幂的和的方案数:经典01背包
  • 电机极数2极、4极、6极、8极的区别
  • Vue接口平台小功能——发送报告到飞书
  • 【KO】android 面试 算法
  • 数据分析学习总结之实例练习(双十一淘宝美妆)
  • MySQL 索引算法
  • 基于Hadoop的汽车价格预测分析及评论情感分析可视化系统