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

Spring Security 是一个基于 Spring 的安全框架,主要用于为 Java Web 应用程序提供身份验证和授权功能。而跨域请求通常是指在浏览器环境下,前端页面使用 AJAX 发起跨域请求,而后端服务器需要响应跨域请求的场景。 Spring Security 提供了解决跨域请求的方式,其中比较常用的是 CORS(跨域资源共享)机制。CORS 机制通过在服务器端设置响应头来允许跨域访问,具体步骤如下: 1. 在 Spring Security 的配置中添加 cors() 方法,如下: ``` @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.cors() .and() //其他配置 .csrf().disable(); } @Bean public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); configuration.addAllowedOrigin("*"); configuration.addAllowedHeader("*"); configuration.addAllowedMethod("*"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", configuration); return source; } } ``` 2. 在 CorsConfigurationSource 中设置允许跨域访问的源、方法和头信息。以上代码中的 configuration.addAllowedOrigin("*") 表示允许所有来源跨域访问,configuration.addAllowedHeader("*") 表示允许所有头信息,configuration.addAllowedMethod("*") 表示允许所有 HTTP 方法。 以上就是 Spring Security 解决跨域请求的方法,希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HoneyMoose

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

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

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

打赏作者

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

抵扣说明:

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

余额充值