环境搭建
简介:
SpringSecurity是针对Spring项目的安全框架,也是SpringBoot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少量的配置,即可实现强大的安全管理
pom.xml导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
主代码以及结构
然后进行配置security,使得可以进行鉴权
创建一个config包,然后配置spring security代码
antMatchers 是 Spring Security 中用于基于路径模式配置 HTTP 请求授权规则的方法。它允许你指定哪些 URL 路径可以被哪些角色或权限访问,或者是否允许匿名用户访问。
antMatchers() 方法通过匹配指定的路径模式,定义该路径的安全规则。
它基于 Ant 风格的路径匹配语法,用于匹配 URL,例如 "/admin/**" 或 "/public/*"。
通过 antMatchers(),你可以设置哪些 URL 允许所有人访问,哪些 URL 需要认证或特定的权限才能访问。
所以,上述代码的解释为:
.antMatchers("/").permitAll() //根路径所有人都能访问
.antMatchers("/level1").hasRole("vip1") //vip1才能访问 /level1
.antMatchers("/level2").hasRole("vip2") //vip2才能访问 /level2
.antMatchers("/level3").hasRole("vip3") //vip3才能访问 /level3
后续进行http.formLogin();设置鉴权,level1、level2、level3没有权限的话,跳转到登陆页
设置成功 如果访问/level1直接跳转登陆页面
写好SpringSecurity的鉴权,接下来分析SpringSecurity权限绕过
antMatchers 配置不当权限绕过
这里antMatchers("/level1").hasRole("vip1")只有vip1进行了身份认证,才能进入到/level1,否则是会进行跳转登陆页面。
这里是可以通过/level1/进行鉴权绕过
绕过鉴权成功
但是如果是以/level1/**这种方式进行鉴权的话,就可以避免使用/进行权限绕过
regexMatchers 配置不当权限绕过
regexMatchers 是 Spring Security 中的一种方法,允许使用正则表达式(regular expressions, regex)匹配 URL 路径。与 antMatchers 不同的是,regexMatchers 使用正则表达式来定义更加灵活、复杂的匹配规则,适合需要精准或复杂路径匹配的场景。
将鉴权处的antMatchers修改为regexMatchers
由于regexMatchers配置不当,可以接着使用/level1/进行绕过
或者可以使用/level1?进行绕过
如果将正则修改为/level1/ 开头的任意路径
使用/level1/或者/level1?是无法绕过鉴权的