Spring 什么时候发回 XSRF-TOKEN set-cookie 响应标头?



标题很好地总结了这一切。我要求应该满足的条件,因此 Spring 决定发回一个Set-Cookie:XSRF-TOKEN=...响应标头。

我可以看到我的许多请求都在不需要的情况下返回带有此类标头的响应。例如,当我发送 GET 请求时,即使我已经为请求设置了X-XSRF-TOKEN,它也会收到带有该标头集的响应。但是对于具有上述请求标头的 POST 请求,将阻止 Spring 发回 set-cookie 标头。所以我想知道应该满足什么条件,所以春天决定寄回一个。

我花了一些时间追踪Spring Security的源代码,我设法自己找到了答案。

首先,我不知道CSRF是如何工作的,跟踪代码帮助我完全理解它。我认为这是值得了解的。以下是从 CSRF 角度发送和接收的请求和响应的场景:

  1. 第一个请求将发送到服务器。由于它是第一个,因此它没有设置cookie或标头。
  2. 无论请求的方法如何,服务器(此处为 Spring 安全性)都会查看传入的请求。如果没有以 XSRF-TOKEN 的名义发送到服务器的 cookie,它将在响应返回的途中生成一个 SET COOKIE 标头。
  3. 客户端接收 cookie,对于第二个请求,它将在名为 X-XSRF-TOKEN 的请求中添加一个标头,设置为与收到的 cookie 相同的值。当然,cookie 将在第二个请求时自动发送到服务器。
  4. 当服务器收到第二个请求时,这次它有一个 XSRF-TOKEN cookie,因此它将查找 X-XSRF-TOKEN 标头,并且仅当这两个字符串匹配时,请求才被视为有效。

至于我问题的答案,正如我在第二步中提到的,如果没有向服务器发送 cookie(使用 XSRF-TOKEN 名称),则会生成 cookie。而且它不依赖于任何其他因素 - 什么!

最新更新