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

Spring (33)CSRF(跨站请求伪造)保护

跨站请求伪造(CSRF)是一种常见的网络攻击手段,它允许攻击者在不知情的用户浏览器中发起恶意请求。这种攻击利用了网站对用户浏览器的信任。如果用户在浏览器中已经登录了一个网站,攻击者就可以构造一个请求,这个请求能够利用用户的登录状态在该网站上执行未授权的操作。

CSRF保护机制

为了防御CSRF攻击,网站需要确保它们只接受那些明确意图发起的请求。一种常见的防御手段是使用CSRF令牌(也称为CSRF令牌)。这个令牌是一个随机值,服务器在渲染表单时生成并包含在表单中,随后,任何对服务器的请求都需要包含这个令牌。由于攻击者无法访问这个令牌,他们构造的恶意请求将会失败。

Spring Security中的CSRF保护

Spring Security 提供了内置的CSRF保护机制。默认情况下,它会为所有的POST、PUT、PATCH和DELETE请求启用CSRF保护。它通过CsrfFilter过滤器实现这一功能。

CsrfFilter工作原理

CsrfFilter激活时,它会在每个请求上执行以下操作:

  1. 检查CSRF令牌:如果请求是一个需要被保护的HTTP方法(例如POST),它会检查请求中是否含有有效的CSRF令牌。
  2. 生成和存储CSRF令牌:对于每个新的会话,CsrfFilter会生成一个新的CSRF令牌,并在服务器端存储这个令牌。令牌也会被发送到客户端,通常是作为一个表单的隐藏字段。
  3. 验证CSRF令牌:当用户提交一个表单时,客户端发送的令牌必须与服务器端存储的令牌匹配。如果令牌不匹配,请求将被拒绝。
CSRF保护的配置

在Spring Security配置中,默认已经启用了CSRF保护。但是,你可以按需修改或禁用这一功能。以下是一个示例,展示如何在Spring Security配置中自定义CSRF保护:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http// 其他配置....csrf(csrf -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()));// 此配置使用了基于Cookie的CSRF令牌存储策略,并将CSRF令牌作为一个JavaScript可访问的cookie发送给客户端。}
}
生成和验证CSRF令牌的源码解析

CsrfFilter类是Spring Security中处理CSRF保护逻辑的关键。在源码层面,CsrfFilter会使用一个CsrfTokenRepository来存储CSRF令牌。默认情况下,使用的是HttpSessionCsrfTokenRepository,但你可以通过配置改变这一行为。

当处理请求时,CsrfFilter会调用CsrfTokenRepository来加载当前的CSRF令牌,检查请求中的令牌是否与之匹配。匹配逻辑主要在CsrfFilterdoFilterInternal方法中实现:

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {CsrfToken csrfToken = this.tokenRepository.loadToken(request);final boolean missingToken = csrfToken == null;if (missingToken) {csrfToken = this.tokenRepository.generateToken(request);this.tokenRepository.saveToken(csrfToken, request, response);}request.setAttribute(CsrfToken.class.getName(), csrfToken);request.setAttribute(csrfToken.getParameterName(), csrfToken);if (!this.requireCsrfProtectionMatcher.matches(request)) {filterChain.doFilter(request, response);return;}String actualToken = request.getHeader(csrfToken.getHeaderName());if (!csrfToken.getToken().equals(actualToken)) {if (this.logger.isDebugEnabled()) {this.logger.debug("Invalid CSRF token found for " + UrlUtils.buildFullRequestUrl(request));}if (missingToken) {this.accessDeniedHandler.handle(request, response, new MissingCsrfTokenException(actualToken));}else {this.accessDeniedHandler.handle(request, response, new InvalidCsrfTokenException(csrfToken, actualToken));}return;}filterChain.doFilter(request, response);
}

从上面的代码可以看出,CsrfFilter首先尝试从存储中加载CSRF令牌。如果没有找到,它会生成一个新的令牌。然后,它检查如果请求需要CSRF保护,请求中的令牌必须与存储中的令牌匹配。

通过这种机制,Spring Security提供了一种强大的方式来自动防御CSRF攻击,同时也提供了足够的灵活性,以适应不同应用的需求。

相关文章:

Spring (33)CSRF(跨站请求伪造)保护

跨站请求伪造(CSRF)是一种常见的网络攻击手段,它允许攻击者在不知情的用户浏览器中发起恶意请求。这种攻击利用了网站对用户浏览器的信任。如果用户在浏览器中已经登录了一个网站,攻击者就可以构造一个请求,这个请求能…...

【一刷《剑指Offer》】面试题 29:数组中出现次数超过一半的数字

力扣对应题目链接:169. 多数元素 - 力扣(LeetCode) 牛客对应题目链接:数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com) 核心考点 : 数组使用,简单算法的设计。 一、《剑指Offer》对应内容 二…...

vx小程序初学

小程序初学 在我还没接触到微信小程序之前,通常使用轮播要么手写或使用swiper插件去实现,当我接触到微信小程序之后,我看到了微信小程序的强大之处,让我为大家介绍一下吧! swiper与swiper-item一起使用可以做轮播图 …...

vue 笔记01

目录 01 vuejs中属性的基本使用 02 v-show指令的使用 03 v-if 指令的使用 04 v-for指令的使用 05 v-model 指令 06 template模板标签 07 v-on事件的绑定指令 08 事件中的event对象 01 vuejs中属性的基本使用 {{ }} 叫做mustache模板语法 双花括号 小胡子语法 双花括号…...

开发电商系统的技术选型

开发电商系统是一个复杂的任务,需要全面的技术选型来确保系统的稳定性、可扩展性和性能。本文将详细探讨在开发电商系统时涉及的各方面技术选型,包括架构设计、前端技术、后端技术、数据库选择、缓存策略、安全性、支付系统、日志和监控、以及自动化运维…...

C++STL---vector常见用法

C STL中的vector vector是C标准模板库(STL)中最常用的序列容器之一,它是一个动态数组,能够存储任意类型的对象(如整数、字符串等)。vector的主要优点是提供了快速的随机访问,同时还能够动态地调…...

linux文件共享之samba

1.介绍 Samba是一个开源文件共享服务,可以使linux与windows之间进行文件共享,可以根据不同人员调整共享设置以及权限管理。 2.安装 一个命令就OK了:yum install -y samba [rootansible01 ~]# yum install -y samba 已加载插件:l…...

端午传统食品创意营销方案

端午传统食品创意营销方案 目 录 一、市场营销环境分析 1 (一)历史记载 1 (二)粽叶的象征 1 (三)粽子文化 1 (四)竞争分析 2 (五)粽子当今发展 4 二、产品创…...

制作ChatPDF之Elasticsearch8.13.4搭建(一)

Elasticsearch8.x搭建 在Windows系统上本地安装Elasticsearch的详细步骤如下: 1. 下载Elasticsearch 访问 Elasticsearch下载页面。选择适用于Windows的版本8.13.4,并下载ZIP文件。 2. 解压文件 下载完成后,找到ZIP文件(例如…...

一种最大重叠离散小波包特征提取和支持向量机的ECG心电信号分类方法(MATLAB 2018)

目前小波分析算法常采用Mallat快速算法。该算法由与滤波器卷积、隔点采样和隔点插零等三个环节组成。由于实际使用的滤波器并不具有理想频域特性,使得在标准二进小波算法中存在着频率混叠和小波系数失真等缺点,在标准二进小波包算法中还存在频带错乱现象…...

德勤:中国、印度等对ChatGPT等生成式AI应用,处领先地位

全球四大会计事务所之一的德勤(Deloitte)在官网发布了一份,名为《Generative AI in Asia Pacific: Young employees lead as employers play catch-up》的深度调查报告。 主要查看中国、澳大利亚、印度、日本、新加坡、韩国、中国台湾等亚太…...

开发靠谱心得

1、目的 记录下 不靠谱的行为,以规范自己的开发步骤。 2、内容 2.1 不应该做哪些事情 1、禁止虚假的交付 2、禁止随意的承诺 3、禁止推卸责任式的通知 4、禁止组织浪费多人时间的会议 5、禁止重要事故不向上反馈 6、禁止延期不提前预警 7、禁止遗漏工作和疏忽大意 …...

【OpenHarmony】TypeScript 语法 ④ ( 函数 | TypeScript 具名函数和匿名函数 | 可选参数 | 剩余参数 | 箭头参数 )

文章目录 一、TypeScript 函数1、TypeScript 具名函数和匿名函数2、TypeScript 函数 与 JavaScript 函数对比3、TypeScript 函数 可选参数4、TypeScript 函数 剩余参数5、TypeScript 箭头函数 参考文档 : <HarmonyOS第一课>ArkTS开发语言介绍 一、TypeScript 函数 1、Typ…...

嵌入式工程师人生提质的十大成长型思维分享

大家好,作为一名嵌入式开发者,很多时候,需要考虑个人未来的发展,人生旅途复杂多变,时常面临各种各样的挑战。如何在这个复杂多变的社会中稳步向前,不断成长,成为每个人都应该思考的问题。实际上,思维方式的差异决定我们应对挑战的能力与成长的速度。 第一:寻找自我坐…...

名下企业查询,清晰明了;在线操作,方便快捷

在现代社会&#xff0c;越来越多的人开始涉足创业和投资&#xff0c;拥有自己的企业成为一种时尚。然而&#xff0c;随之而来的是繁琐的企业注册流程和复杂的信息查询。为了解决这个问题&#xff0c;挖数据平台推出了一项名下企业查询接口&#xff0c;提供了一种方便快捷的方式…...

图书推荐:ChatGPT专业知识信息课程

《ChatGPT专业知识信息课程》&#xff08;ChatGPT-Expertise Informative Course&#xff09; 是一本由Dwayne Anderson撰写的电子书&#xff0c;提供了关于ChatGPT的丰富知识。该书涵盖了与ChatGPT相关的各种主题&#xff0c;如其与OpenAI的关系、ChatGPT与GPT-3之间的混淆、C…...

Java项目:94 springboot大学城水电管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本管理系统有管理员和用户。 本大学城水电管理系统管理员功能有个人中心&#xff0c;用户管理&#xff0c;领用设备管理&#xff0c;消耗设备…...

Unity内制作动画

Unity内制作动画 动画剪辑&#xff08;Animation Clips&#xff09; 创建动画剪辑&#xff1a;在Unity中&#xff0c;可以通过导入动画数据来创建动画剪辑。这些数据可以是FBX、OBJ等格式的3D模型文件&#xff0c;其中包含关键帧动画。 编辑动画剪辑&#xff1a;在Unity的Anim…...

Java中的JDBC如何连接数据库并执行操作

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言中用来连接和操作数据库的一组API。以下是一个基本的步骤指南&#xff0c;用于连接数据库并执行操作&#xff1a; 导入JDBC驱动 首先&#xff0c;你需要将数据库的JDBC驱动添加到你的项目依赖中。如果你…...

webserver服务器从零搭建到上线(六)|Timestamp类和InetAddress类

本节我们重点来谈论&#xff1a; 时间类和我们的初始化链接地址类 文章目录 Timestamp类成员函数实现 InetAddress类具体实现 Timestamp类 我们为什么要封装一个时间类呢&#xff1f; 这也是一个大型项目必须的基础组建&#xff0c;这样我们不仅可以提高代码的可读性&#xf…...

煤矿智能化验收必备:针对睡岗、离岗识别的AI视觉解决方案

在煤矿智能化建设中&#xff0c;确保井下作业人员的安全与规范操作是重中之重。睡岗、离岗等违规行为不仅影响生产效率&#xff0c;更可能引发严重的安全事故。因此&#xff0c;在煤矿智能化验收环节&#xff0c;一套高效精准的针对睡岗、离岗识别的AI视觉解决方案不可或缺。一…...

5分钟掌握PESQ:Python语音质量评估终极指南

5分钟掌握PESQ&#xff1a;Python语音质量评估终极指南 【免费下载链接】PESQ PESQ (Perceptual Evaluation of Speech Quality) Wrapper for Python Users (narrow band and wide band) 项目地址: https://gitcode.com/gh_mirrors/pe/PESQ 想要客观评估语音处理算法效果…...

世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作&#xff0c;需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释&#xff08;因业务实际需要存储大数值关联字段&#xff09;。 表的核心特性为Java 多线程密集读写&#xff0c;业务请求持续…...

Pixel Couplet Gen效果展示:抽象门神像素方块+动态卷轴交互演示

Pixel Couplet Gen效果展示&#xff1a;抽象门神像素方块动态卷轴交互演示 1. 项目概览 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的AI春联生成器。通过ModelScope大模型驱动&#xff0c;将传统春联创作转化为充满游戏感的数字体验。 核心特点&#xff1a…...

避坑指南:新到手的NUC 13装Ubuntu,WiFi驱动对了但图标不显示?可能是AX211网卡在Linux下的‘通病’

NUC 13安装Ubuntu后WiFi图标消失的深度排查与解决方案 刚拿到手的Intel NUC 13装上Ubuntu系统&#xff0c;WiFi驱动看似正常却不见图标&#xff1f;这可能是AX211网卡在Linux下的"通病"。作为一名长期与硬件兼容性问题打交道的技术顾问&#xff0c;我遇到过太多类似…...

企业级母婴商城系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着互联网技术的快速发展和电子商务的普及&#xff0c;母婴用品市场呈现出蓬勃发展的态势。年轻父母对于母婴产品的需求日益多样化&#xff0c;传统的线下零售模式已无法满足其便捷、高效、个性化的购物需求。因此&#xff0c;构建一个功能完善、安全可靠的企业级母婴商城…...

长上下文与RAG

读到一篇探讨RAG技术的文章&#xff0c;很受用&#xff0c;遂记录一下。核心结论&#xff1a;RAG不会被无限上下文取代。 原文地址&#xff1a;LLM无限上下文了&#xff0c;RAG&#xff08;Retrieval Augmented Generation&#xff09;还有意义吗&#xff1f; - 今日头条 以下…...

Apifox供应链投毒攻击--完整解析

&#x1f534; 安全应急通告&#xff1a;Apifox 桌面端供应链投毒与高危凭证窃取事件 一、 事件概述 近期监测到 Apifox 公网 SaaS 版桌面客户端遭遇严重的供应链投毒攻击。攻击者通过劫持合法的运行追踪模块&#xff0c;向用户下发具备凭证窃取、动态执行与持久化能力的恶意 J…...

HDSceneColor节点]原理解析与实际应用

渲染管线兼容性详解HD Scene Color节点的可用性完全取决于所使用的渲染管线&#xff0c;这是开发者在选择和使用该节点时必须首先考虑的因素。高清渲染管线&#xff08;HDRP&#xff09;支持HDRP是Unity针对高端平台和高端硬件设计的高保真渲染解决方案HD Scene Color节点专为H…...

LiuJuan20260223Zimage开箱体验:基于Z-Image LoRA,这个专精模型到底有多好用?

LiuJuan20260223Zimage开箱体验&#xff1a;基于Z-Image LoRA&#xff0c;这个专精模型到底有多好用&#xff1f; 你有没有遇到过这样的情况&#xff1a;想用AI画一个特定的人物&#xff0c;比如你故事里的主角&#xff0c;或者一个IP形象&#xff0c;但生成的图片要么不像&am…...