• 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 过滤器上禁用。

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

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

  • 相关阅读:
    工厂模式一
    面向对象的简单理解二
    工厂模式三
    线程的简单学习
    nyoj35 表达式求值
    nyoj305 表达式求值
    poj1298 The Hardest Problem Ever
    poj1363 Rails
    hdu2036 改革春风吹满地
    nyoj467 中缀式变后缀式
  • 原文地址:https://www.cnblogs.com/huyuchengus/p/13824110.html
Copyright © 2020-2023  润新知