Spring boot 在同一台机器上的两个选项卡中打开同一页时的CSRF令牌值?

Spring boot 在同一台机器上的两个选项卡中打开同一页时的CSRF令牌值?,spring-boot,spring-security,csrf,csrf-token,Spring Boot,Spring Security,Csrf,Csrf Token,据我所知,当服务器端启用CSRF时,服务器将创建一个令牌(比如token1)并将其注入表单,并将其保存在客户端浏览器的cookie中。 当客户端向服务器发送表单请求时,它从浏览器cookie发送csrf令牌(令牌1),并发送与表单中相同的令牌。服务器通过检查cookie中的令牌和表单中的令牌是否匹配来验证请求,然后处理请求 现在,如果我在另一个选项卡中打开相同的表单,服务器会生成另一个令牌(token2)并将其注入表单和cookie中。然后,在cookie中,token1将被token2覆盖。那

据我所知,当服务器端启用CSRF时,服务器将创建一个令牌(比如token1)并将其注入
表单
,并将其保存在客户端浏览器的cookie中。 当客户端向服务器发送
表单
请求时,它从浏览器cookie发送csrf令牌(令牌1),并发送与
表单
中相同的令牌。服务器通过检查cookie中的令牌和
表单中的令牌是否匹配来验证请求,然后处理请求

现在,如果我在另一个选项卡中打开相同的
表单
,服务器会生成另一个令牌(token2)并将其注入
表单
和cookie中。然后,在cookie中,
token1
将被
token2
覆盖。那么在这种情况下,在第一个选项卡中提交表单将不起作用?但根据经验,我发现在表1中提交
表单
仍然成功


那么,有人能解释一下在上述场景中它是如何成功的吗?

既然您添加了Spring Security标记,我将描述Spring Security如何使用同步器令牌模式来抵御CSRF攻击

服务器创建一个令牌(比如token1)并将其注入表单,并将其保存在客户端浏览器的cookie中

事实并非如此。服务器将创建一个CSRF令牌(令牌1)并将该令牌存储在HttpSession中。CSRF令牌(令牌1)也可以嵌入到客户端的表单中。客户机还获得了一个会话ID(Session-id1),该ID存储在cookie中

当客户端提交表单时,它发送token1和session-id1。然后,服务器将使用session-id1查找HttpSession并获取该会话的预期CSRF令牌。它将比较预期的CSRF令牌和令牌1,如果值不匹配,HTTP请求将被拒绝

如果在另一个选项卡中打开同一表单,浏览器仍可以访问会话ID(会话id1)。该表单将获得与会话id1关联的相同令牌(令牌1)

最后,两个选项卡中只使用一个CSRF令牌(令牌1)


您可以在中找到有关防范CSRF攻击的更多信息。

非常感谢您将HttpSession引入图片。当用户在新选项卡中打开不同表单时会发生什么情况。我认为同样的csrf令牌(令牌1)也将用于第二种形式。我这样认为是因为SpringSecurity可能没有一种方法来区分表单。如果spring security根据表单名称等识别表单,我可能会错。如果是这种情况,那么开发人员应该注意不要在不同的表单中使用相同的表单名称。请分享您的想法。Eleftheria,如果您能就如何处理上述多个表单发表评论,将不胜感激。这一点非常重要,因为安全性至关重要。请求返回IronMan-这篇文章似乎有一种矛盾的方法-
服务器在响应中包含两个令牌。一个令牌作为cookie发送。另一个放置在隐藏的表单字段中。令牌是随机生成的,因此对手无法猜出值。
稍微相关的Q-但没有回答其他相关的Q-