当前位置: 首页 > 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.lryc.cn/news/618691.html

相关文章:

  • 记对外国某服务器的内网渗透
  • 解释 Spring MVC 的工作原理
  • Linux中使用计划任务和tar命令实现文件备份
  • 模拟人脑处理文本——从段落到时间线叙事,再到动画
  • 【PCB设计经验】去耦电容如何布局?
  • C++ 学习与 CLion 使用:(二)using namespace std 语句详解,以及 std 空间的标识符罗列
  • 【python实用小脚本-182】Python一键爬取今日新闻:5分钟生成Word+CSV——再也不用复制粘贴
  • 【web站点安全开发】任务2:HTML5核心特性与元素详解
  • 02-Ansible 基本使用
  • Python day42
  • 【运维进阶】Ansible 自动化
  • [激光原理与应用-250]:理论 - 几何光学 - 透镜成像的优缺点,以及如克服缺点
  • TensorBoard的使用 小土堆pytorch记录
  • centos 怎么部署 vscode 网页版
  • 半精度模型(16位)解析
  • TRO风暴预警GoPro携BSF律所重拳打击跨境侵权
  • QT6 如何在Linux Wayland 桌面系统抓屏和分享屏幕
  • 使用Excel制作甘特图
  • 将黑客拒之物联网网络之外的竞赛
  • 5G毫米波现状概述(截止2025 年7月)
  • ROS教育中自动驾驶机器人的技术融合与技术创新
  • 门店销售机器人的认知革命:当传统机械邂逅Deepoc具身智能
  • CVPR 2025丨机器人如何做看懂世界
  • 开疆智能Ethernet转ModbusTCP网关连接发那科机器人与三菱PLC配置案例
  • RoboNeo美图AI助手
  • 如何区分类的关系是关联和聚合?
  • Java工厂模式
  • 【图像算法 - 13】基于 YOLO12 与 OpenCV 的实时目标点击跟踪系统(系统介绍 + 源码详细)
  • mysql 简单操作手册
  • springboot+JPA