Spring Security的csrf防护措施|学习笔记

简介: 快速学习Spring Security的csrf防护措施

开发者学堂课程【Spring Security知识精讲与实战演示(一)Spring Security的 csrf 防护措施】学习笔记与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/730/detail/13035


Spring Security的csrf防护措施

 

已经使用了自定义认证页面而且认证也通过了。但是目前的后台系统很容被 csrf 攻击,此时就需要防止被攻击。

csrf攻击:目前网站正在开着,并且已经登录。但同时又开着另一个网站。两个网站登录着同一个浏览器,如果另一个网站有 csrf 攻击的病毒,病毒就可以获取整个浏览器中的Cooke信息(包含 Spring Security 网站中的认证信息),得到信息之后就可以伪造登录网站。

这时这个网站就不安全了。所以必须要使csrf这个过滤器起到作用还能保证后天管理系统是安全的。

怎样使用csrf?

看过滤器内的源码是什么样的。现在将CsrfFilter拿过来,来到Spring Security.xml,按两次shift。

image.png

点击进去,找主要的方法就是do filter Internet。在这个方法中可以看到上面是在验证token。如果没有token,就会直接看出页面不存在。Token从哪里拿?网站中有一个专门的生成token的工具类。image.png

通过httpSessionCsrfTokenRepositorf将token放在session中。这个token的生成无需关注。

If   else如下图,分了两个分支。

image.png

首先看If,先做了一个判断,如果满足这个条件,就会直接放行不再做任何的处理。里面经过了requestcsrfprotionmatcher,点击进去。

image.png

有上图的属性。给它赋值:DEFAULT-CSRF-MATCHER。继续点击。

image.png

可以看到后面的new csrffilter,还是当前的实例方法。因为使用实例调出来的。继续点击进去。

image.png

Arrays aslist指的是返回一个list。如果是GET、HEAD、TRACE、OPTIONS请求,csrf就不做处理直接放行。除了上面列举出来之外的请求,都是要判断的。例如POST请求、DELETE请求、PUT请求都会被拦截。GET、HEAD、TRACE、OPTIONS请求都不会给数据库造成影响。GET只是查询。但是增加POST、删除DELETE、改正PUT这些请求会对数据库内的数据进行改变。凡是对数据进行改变的视为安全性比较高的,是不能随意操作的。因此需要对POST、DELETE、PUT这些请求进行csrf拦截。

因为当前的method方式是POST,所以这个地方在不关闭的情况下必须默认经过csrf过滤器。需要走到else,但是请求的时候需要将携带刚刚的token。

image.png

在login中只提供了用户名和密码信息,还需要添加一个信息。

在please sign in中F12隐藏了一个信息。

image.png

需要将上图标蓝的信息给过滤器,因为每次token的信息都是不一样的。每次的token是动态生成的,是不一样的。不把信息给过滤器,csrffilter是获取不到的。获取不到就会出现Invalid CSRF found for异常。

目前首先需要csrf拦截,不能继续将过滤器security:csrf disable=“true”关闭。需要默认过滤器security:csrf disable=“true”是开启的状态。

但是开启之后再认证又报错了,这时候想要成功需要在login中携带token信息。但是不能直接粘贴上图标蓝的信息。因为不知道后面的值是什么,难道需要每次动态获取吗?实则无需这么麻烦。

image.png

在login中引入Spring Security动态标签:<%@taglib url prefix=”security”%>。动态标签中的security这个名字可以随便写。

image.png

上图标签想要使用需要导出taglib的包。不导出是无法使用的。上图标签必须写在对应的位置,写在外面就没用了。

例如写在了外面:有一个csrfInput,下面还有一个csrfMetaTage.这两个都是但是用的地方不一样。前面的是专门和from表单用的。如果from表单需要携带token,就是用上面的。如果不是from表单,是阿贾克斯请求就用下面的个csrfMetaTage.ing framework在paid里面写。所以在这里就使用csrfInput即可。写了csrfInput这个标签之后就相当于上图标蓝的内容,而且后面是动态的。里面变成什么,拿到的就会相应的改变。

image.png

目前csrf就已经设置完成了。现在验证一下。

为了防止项目有缓存,可以将target目录删掉。接下来直接启动。

这时需要注意,如果再次认证通过,就意味着现在的安全通过是绝对安全的。

但是也需要说明一个情况,既然源码中已经写道了,那么之后在写请求方式的时候需要注意,不可以随意乱写。例如需要修改数据,必须使用post。添加就需要使用post。如果还使用之前的随机页面写,不写method=post,就会默认get,但是get的安全性是没有保障的。因为get是不会经过csrf过滤器的。因此需要注意对应的操作使用对应的请求方式,一定要规范。

使用user用户名登录,点击登录,通过了。

这次的通过认证就真正被csrf过滤器保护了。

相关文章
|
9月前
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
1668 5
|
5月前
|
安全 Java API
深入解析 Spring Security 配置中的 CSRF 启用与 requestMatchers 报错问题
本文深入解析了Spring Security配置中CSRF启用与`requestMatchers`报错的常见问题。针对CSRF,指出默认已启用,无需调用`enable()`,只需移除`disable()`即可恢复。对于`requestMatchers`多路径匹配报错,分析了Spring Security 6.x中方法签名的变化,并提供了三种解决方案:分次调用、自定义匹配器及降级使用`antMatchers()`。最后提醒开发者关注版本兼容性,确保升级平稳过渡。
621 2
|
6月前
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
187 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
5月前
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
141 20
|
11月前
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
8766 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
10月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
209 9
|
11月前
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
121 9
|
11月前
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
79 1
|
11月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
437 2
|
11月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
1686 1