Spring何时发送回XSRF-TOKEN set-cookie响应头?

时间:2017-06-20 20:03:48

标签: spring spring-security csrf x-xsrf-token

标题总结得很好。我要求满足应该满足的条件,因此Spring决定发送回X-XSRF-TOKEN响应标头。

我可以看到我的很多请求都是在不需要的情况下使用这样的标题回复响应。例如,当我发送GET请求时,即使我为请求设置了document.getElementById("#<%=prftdiv.ClientID%>").style='display:block' ,它也会获得带有该标头集的响应。但对于具有上述请求标头的POST请求,将阻止Spring发回set-cookie标头。所以我想知道应该满足的条件是什么,所以Spring决定寄回一个。

1 个答案:

答案 0 :(得分:1)

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

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

  1. 第一个请求被发送到服务器。由于它是第一个,因此没有设置cookie或标题。
  2. 无论请求的方法如何,服务器(在此处为Spring Security)都会查看传入的请求。如果没有以名称XSRF-TOKEN发送到服务器的cookie,它将在回复的路上生成一个SET COOKIE标题。
  3. 客户端收到cookie,对于第二个请求,它将在名称X-XSRF-TOKEN下为请求添加一个标头,设置为与收到的cookie相同的值。当然,cookie会自动发送到服务器并带有第二个请求。
  4. 当服务器收到第二个请求时,这次它有一个XSRF-TOKEN cookie,因此它将查找X-XSRF-TOKEN标头,只有当这两个字符串匹配时才认为该请求有效。 /强>
  5. 至于我的问题的答案,正如我在第二步中提到的,如果没有向服务器发送cookie(带有XSRF-TOKEN名称),则会生成cookie。它不依赖任何其他因素 - 所以永远!