Spring security CSRF 跨域访问限制问题

在我们写 Spring 安全的时候通常有这么一句话:

httpSecurity.csrf().disable().

从这句话的字面意思就很明白就是禁用 csrf,什么是 csrf,为什么要禁用可能就一脸懵逼了。

因为你很有可能会遇到一个错误:

HTTP Status 403-Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

这个就是做 Web 开发的时候非常头痛的跨域访问问题。

Spring Security 后,引入了CSRF,默认是开启。不得不说,CSRF和RESTful技术有冲突。CSRF默认支持的方法: GET|HEAD|TRACE|OPTIONS,不支持POST。

什么是 CSRF ,这是一个 WEB 应用安全的问题,CSRF(Cross-site request forgery 跨站请求伪造,也被称为“One Click Attack” 或者Session Riding,攻击方通过伪造用户请求访问受信任站点。

其实跨域攻击操作过程比较简单,就是如果你不采取任何限制的时候,对 POST 相对风险系数比较高的访问,用户可以伪造请求,然后对服务器进行攻击和修改。

比如说通过 伪造 POST 请求,然后能够将用户的数据删除。

在跨域 (同一个 IP、同一个网络协议、同一个端口,三者都满足就是同一个域,否则就有跨域问题)。为什么在基于网页开发的时候没有这个跨域的问题,但是基于 RETS 开发的时候就非常明显。

这是因为在网页开发的时候,首先服务器会返回 sessionid 到客户端的界面,在客户端向服务器请求的时候,都会带有这个 session id。

在 RESTFul 开发的时候,这个情况就没有办法避免,因为我们的 API 会暴露给不同的用户,用户可能也会使用不同的 IP 地址,尤其用户可能还部署了多个服务器的情况下。

因此,我们在 Spring 安全配置下,需要禁用 CSRF。

禁用方法

有你需要在,程序 http 过滤器上禁用。

 

Spring-security-csrf-01

 

这个就是你在上面看到的那个代码。

https://www.ossez.com/t/spring-security-csrf/587

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HoneyMoose

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值