SpringSecurity:CSRF攻击

本文通过实验介绍了SpringSecurity默认的CSRF防护机制,展示了GET请求为何能通过而POST请求被拦截。实验涉及不同域名下的请求,以及CSRF在GET和POST请求中的表现,强调了POST请求的安全性。最后提出了开启CSRF防护后,前端如何发起POST请求以及何时需要CSRF防护的问题。
摘要由CSDN通过智能技术生成

背景

本系列教程,是作为团队内部的培训资料准备的。主要以实验的方式来体验SpringSecurity的各项Feature。

实验0:SpringSecurity默认开启CSRF防护

现在我们在springboot-security项目的HelloController.java中新增一个POST接口:/ok

@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "hello springsecurity";}@PostMapping("/ok")public String ok(){return "ok";}
} 

当然这个POST接口无法直接在浏览器中发起请求,我们需要借助PostMan来实现POST请求的发送。把浏览器中的Cookie复制到PostMan中。

  • 先发GET /hello,正常
  • 再发POST /ok,403了。。

那么,问题来了,两个请求都是在登录状态下进行的,为什么GET成功,POST返回403了?

其实SpringSecurity默认就开启了CSRF防护,这在上一篇及官网中关于SpringBoot自动配置项那里可以看到。并且SpringSecurity默认忽略"GET", “HEAD”, “TRACE”, "OPTIONS"等请求,源码如下:

/**
 * Specify the {@link RequestMatcher} to use for determining when CSRF should be
 * applied. The default is to ignore GET, HEAD, TRACE, OPTIONS and process all other
 * requests.
 *
 * @param requireCsrfProtectionMatcher the {@link RequestMatcher} to use
 * @return the {@link CsrfConfigurer} for further customizations
 */
public CsrfConfigure
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值