【问题标题】:Will Spring Security CSRF Token Repository Cookies Work for all Ajax Requests Automatically?Spring Security CSRF 令牌存储库 Cookie 是否会自动适用于所有 Ajax 请求?
【发布时间】:2017-02-23 08:53:21
【问题描述】:

我正在经历以下security tutorial,它像这样配置CsrfTokenRepository

.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

这就是让 Ajax 请求在所有库中运行所需的全部内容吗? $http 的 Angular 文档说 Angular 会读取 Spring 提供的 CSRF cookie,并在发出请求时设置相应的标头。所以我假设它这样做是因为发送 Ajax 请求时不会自动包含 cookie?

[更新]

我又看了一遍文章,上面说 CSRF 保护是由header 提供的。因此,如果我以正确的方式解释,那就是客户端以一种独特的方式发回 cookie 值,这种方式与最初提供 CSRF 保护的方式不同。换句话说,客户端接收到 cookie 并改变它的发回方式,以便服务器知道客户端确实在控制 cookie?

【问题讨论】:

    标签: angularjs ajax http spring-security csrf


    【解决方案1】:

    使用 Spring CookieCsrfTokenRepository 的 CSRF 保护工作如下:

    1. 客户端向服务器(Spring 后端)发出 GET 请求,例如请求主页
    2. Spring 发送 GET 请求的响应以及包含安全生成的 XSRF 令牌的 Set-cookie 标头
    3. 浏览器使用 XSRF Token 设置 cookie
    4. 在发送状态更改请求(例如 POST)时,客户端 (Angular) 将 cookie 值复制到 HTTP 请求标头
    5. 发送请求时同时带有标头和 cookie(浏览器会自动附加 cookie)
    6. Spring比较header和cookie值,如果相同则接受请求,否则返回403给客户端

    请注意,默认情况下,只有状态更改请求(POST、PUT、DELETE)受到 CSRF 保护,并且只有在 API 设计正确时才需要保护这些请求(即 GET 请求没有副作用并修改应用程序的状态)例如)。

    withHttpOnlyFalse 方法允许 Angular 读取 XSRF cookie。确保 Angular 发出 XHR 请求时将 withCreddentials 标志设置为 true。

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2020-08-31
      • 2019-12-06
      • 1970-01-01
      • 2016-06-21
      • 2019-02-23
      • 2017-01-10
      • 2012-05-15
      • 2018-03-14
      相关资源
      最近更新 更多