Spring Security跨站请求伪造(CSRF)

article/2025/9/23 3:23:50

CSRF(Cross Site Request Forgery)

跨站点请求伪造。是攻击者欺骗用户的浏览器去访问一个自己曾经认证过的网站。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了 web 中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

Spring Security 中 CRSF实现

springboot项目集成spring security 5.3.4.RELEASE 后,默认情况crsf是开启的。每次请求会校验请求头中 X-CSRF-TOKEN 的值与内存中保存的的是否一致,如果一致框架则认为当然登录页面是安全的,如果不一致,会报403。

默认首次登录页面会有一个_csrf的隐藏域

主要实现CsrfFilter过滤器

	@Overrideprotected void doFilterInternal(HttpServletRequest request,HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {request.setAttribute(HttpServletResponse.class.getName(), response);// 从存储库session获取csrf tokenCsrfToken csrfToken = this.tokenRepository.loadToken(request);final boolean missingToken = csrfToken == null;if (missingToken) {// 如果没有,就生成并保存csrfToken = this.tokenRepository.generateToken(request);this.tokenRepository.saveToken(csrfToken, request, response);}// 将token设置到request中request.setAttribute(CsrfToken.class.getName(), csrfToken);request.setAttribute(csrfToken.getParameterName(), csrfToken);// 如果是默认方法(或者自定义的匹配方法),就放过if (!this.requireCsrfProtectionMatcher.matches(request)) {filterChain.doFilter(request, response);return;}// 从请求中获取浏览器端传递过来的 X-CSRF-TOKENString actualToken = request.getHeader(csrfToken.getHeaderName());// 浏览器没有,从头部取出时使用header name: X-CSRF-TOKENif (actualToken == null) {actualToken = request.getParameter(csrfToken.getParameterName());}// 不匹配或者没有token,抛出异常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);}

1. 从存储库session获取csrf token

 HttpSessionCsrfTokenRepository.loadToken实现:

2. 默认方法放行

"GET", "HEAD", "TRACE", "OPTIONS"这4类方法会被放行,其它Method的http请求,都要验证_csrf的token是否正确。

matches方法实现 :

3.  从请求头获取实际token 

4.  存储库token和实际token对比

不一致抛出异常,通过就放行。

Spirng Security 关闭 CSRF

public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity httpSecurity) throws Exception {httpSecurity.csrf().disable();}
}


http://chatgpt.dhexx.cn/article/GGBoLXIh.shtml

相关文章

解决Csrf跨站请求伪造

Csrf跨站请求伪造原理: 1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请…

web渗透测试----14、CSRF(跨站请求伪造攻击)

文章目录 一、CSRF概述二、CSRF攻击条件1、相关操作2、基于Cookie的会话处理3、没有不可预测的请求参数 三、CSRF的防御1、验证请求的Referer值2、CSRF Token3、验证码等验证业务过程的方式 四、基于Token的CSRF1、CSRF令牌的验证取决于请求方法2、CSRF令牌的验证取决于令牌是否…

跨站请求伪造漏洞

首先说明一下什么是CSRF(Cross Site Request Forgery)? 跨站请求伪造是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求。 为什么会有CSRF? JS控制浏览器发送请求的时…

DVWA---跨站请求伪造CSRF

CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况…

CSRF 跨站请求伪造攻击

1.概念 全称是CSRF 跨站请求伪造攻击,攻击者利用用户已登陆的账号,诱导用户访问已构造好的恶意链接或页面,在用户不之情的情况下,做一些违反用户本意的一些违法操作。 同源策略:协议相同,域名相同&#xf…

CSRF-跨站请求伪造的原理与修复方式

CSRF: Cross site Request Forgery 跨站请求伪造 原理: 利用xss方式注入一段脚本,通过伪装来自受信任用户的请求来利用受信任的网站,当受害者在浏览器中运行该脚本时,脚本仿冒受害者,向合法的web系统发送一个请求&…

web基础漏洞之CSRF(跨站请求伪造漏洞)

cookie session token 我觉得在开始学习CSRF之前应该先学会区分这三种东西:cookie session token cookie: Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户…

Laravel框架之CSRF跨站请求伪造

一、CSRF攻击 1、什么是CSRF攻击 CSRF是跨站请求伪造(Cross-site request forgery)的英文缩写, 原理图示: csrf在laravel框架中的使用,就是在客户端form表单中设置一个_token表单域 同时把该表单域的值记录给sessi…

什么是CSRF(跨站请求伪造)?

文章目录 1. CSRF是什么?1.1 CSRF攻击细节CSRF攻击原理及过程如下: 2. CSRF漏洞检测3. 防御CSRF攻击:3.1 验证 HTTP Referer 字段3.1.1 优点:3.1.2 缺点: 3.2 在请求地址中添加 token 并验证3.3 在 HTTP 头中自定义属性并验证 1. …

WordPress 跨站请求伪造漏洞

WordPress 跨站请求伪造漏洞 漏洞ID2500593漏洞类型跨站请求伪造发布时间2021-07-08更新时间2021-07-09 CVE编号CVE-2021-20781 CNNVD-IDCNNVD-202107-420漏洞平台N/ACVSS评分N/A 漏洞简介 WordPress是Wordpress基金会的一套使用PHP语言开发的博客平台。该平台支持在PHP和My…

056 CSRF跨站请求伪造

文章目录 一: 概述二:关键点三:目标四:CSRF攻击如何触发?五:实战:CSRF场景复现六:CSRF防御6.1 无效的防御6.2 有效的防御 一: 概述 跨站请求伪造(cross site…

CSRF - 跨站请求伪造

什么是CSRF? CSRF(Cross-site request forgery)跨站请求伪造:也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS)&a…

CSRF(跨站请求伪造)

目录 CSRF 原理及过程 概述 关键点 pikachu靶场之CSRF GET型 POST型 Token 防御 如何挖掘CSRF漏洞 使用burp验证csrf 总结 CSRF (Cross-Site Request Forgery) CSRF是一种欺骗受害者提交恶意请求的攻击,攻击者盗用你的身份,向服务器发送请求…

Spring Boot项目CSRF (跨站请求伪造)攻击演示与防御

CSRF ,Cross-site request forgery,跨站请求伪造。是常见的网络攻击的方式之一,2007年曾被列为互联网20大安全隐患之一。攻击过程是攻击者伪造用户的浏览器请求,访问一个用户曾经访问过的网站, 使目标网站误以为是用户的操作而执行命令。 本篇j基于Spring Boot创建项目,…

每日漏洞 | 跨站请求伪造

01 漏洞描述 HTTP的无状态性,导致Web应用程序必须使用会话机制来识别用户。一旦与Web站点建立连接(访问、登录),用户通常会分配到一个Cookie,随后的请求,都会带上这个Cookie,这样Web站点就很容易分辨请求来自哪个用户&…

CSRF跨站请求伪造

CSRF介绍: CSRF中文名称:跨站请求伪造,是一种“ 挟持用户”在当前已登陆的Web应用程序上执行“ 非本意操作”的攻击方法。 一、CSRF回放攻击流程 套用老师所给的一张攻击原理图 从这张流程图里我们总结一下CSRF攻击生效所需要的两个必要条件 …

【CSRF-01】跨站请求伪造漏洞基础原理及攻防

目录 1 CSRF概述2 CSRF攻击过程及原理2.1 CSRF场景例子2.2 攻击过程2.3 原理2.4 攻击成功的条件: 3 CSRF攻击方式/如何触发5 CSRF的防御5.1 一些无效的防御手段5.2 有效的防御手段 6 总结参考文章 1 CSRF概述 定义:CSRF(Cross-site request …

一文带你学习跨站点请求伪造(CSRF)

一文带你学习跨站点请求伪造(CSRF) 1.何为CSRF2.浏览器的Cookie策略3.P3P头的副作用4.CSRF攻击流程5.CSRF的分类GET型POST-表单型POST-JSON型 6.CSRF的快速验证7.CSRF的防御验证码Referer CheckAnti CSRF Token 1.何为CSRF CSRF的全名是Cross Site Requ…

flask中的csrf防御机制

csrf概念 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS)&…

跨站请求伪造(csrf)

1、csrf介绍 CSRF (Cross-site request forgery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站…