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 跨域访问限制问题文章插图
【Spring security CSRF 跨域访问限制问题】这个就是你在上面看到的那个代码 。