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过滤器保护了。

相关文章
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
2773 5
|
安全 Java API
深入解析 Spring Security 配置中的 CSRF 启用与 requestMatchers 报错问题
本文深入解析了Spring Security配置中CSRF启用与`requestMatchers`报错的常见问题。针对CSRF,指出默认已启用,无需调用`enable()`,只需移除`disable()`即可恢复。对于`requestMatchers`多路径匹配报错,分析了Spring Security 6.x中方法签名的变化,并提供了三种解决方案:分次调用、自定义匹配器及降级使用`antMatchers()`。最后提醒开发者关注版本兼容性,确保升级平稳过渡。
1816 2
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
安全 Java 数据安全/隐私保护
解析Spring Security中的权限控制策略
解析Spring Security中的权限控制策略
|
存储 安全 JavaScript
Web漏洞挖掘:XSS与CSRF防护策略
【7月更文挑战第11天】XSS和CSRF作为Web应用中常见的安全漏洞,对系统安全构成了严重威胁。通过实施上述防护策略,可以有效减少这些漏洞的风险。然而,Web安全攻防是一个持续不断的过程,开发者需要持续关注应用的安全性,更新和修补安全漏洞,同时加强自身的安全意识和防范技能,以确保Web应用的安全性和稳定性。
|
安全 Java 数据安全/隐私保护
使用Spring Security实现细粒度的权限控制
使用Spring Security实现细粒度的权限控制
|
安全 Java 数据安全/隐私保护
使用Java和Spring Security实现身份验证与授权
使用Java和Spring Security实现身份验证与授权
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1633 0
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1585 0