【问题标题】:Why AntiForgeryToken in different browser tabs with different values all execute successfully?为什么不同浏览器选项卡中不同值的 AntiForgeryToken 都执行成功?
【发布时间】:2018-09-19 14:12:36
【问题描述】:

我有一个带有防伪令牌的 MVC 5 View 表单。

我在 2 个不同的选项卡中打开了相同的 URL,并查看了页面源代码 我得到 2 个不同的 __RequestVerificationToken 表单令牌。

__RequestVerificationToken cookie 具有相同的值。

第一个浏览器标签:

<input name="__RequestVerificationToken" type="hidden" value="JK3VfUNG8MbkWHRcUUoYoYuBEqYg1VZl38rT_Oje6WRpUHIKnRgVsaXX6K_qQMm5OXiw5UDjKlSppYBeEFZbvzKHCDndo_BXcZYkcnxL9E1" />

第二个浏览器标签:

&lt;input name="__RequestVerificationToken" type="hidden" value="TFwq8uATFit48n63lm8AkWFw2uPCaAroIFYcjznF35tEbRc1vTyJaz3QDu4E_aIM85LcttBubeRqvxy-he0SMRQsTdtJwvvwQ_Adk1yWbVA1" /&gt;

显然,防伪令牌必须与防伪 cookie 一起验证。

但即使防伪 cookie 相同,防伪令牌的形式也不同。

如何在 POST 后成功执行两个页面?这里的解密是如何工作的?

提前致谢。

【问题讨论】:

  • 这是 2 个单独的响应,因为我在 2 个不同的浏览器选项卡中打开了相同的 URL
  • 您是否阅读了链接中的答案? (不确定您的评论与什么有关 - 没有区别)
  • 对不起,我现在就看你的链接
  • @StephenMuecke 所以差异的原因在于令牌的AdditionalData?

标签: c# asp.net-mvc csrf antiforgerytoken


【解决方案1】:

浏览器根据站点的标识符生成令牌,cookie 包含解密的密钥。只要站点保持相同的“myapp.myserver.com”,浏览器就能够解密该值。浏览器只需成功解密并因此验证令牌。 ValidationResult = (Token + cookie = 匹配) 任何时候,都可以生成令牌,并且浏览器可以通过使用 cookie 来验证它是否属于给定站点。

【讨论】:

  • 当表单标记不同但仍能正确验证时,您将如何解释?
  • 如果黑客窃取了 cookie 并以某种方式获取了之前的任何令牌并执行 POST 并且他将被授予访问该页面的权限?
猜你喜欢
  • 2014-05-19
  • 1970-01-01
  • 2017-01-29
  • 2011-12-13
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
相关资源
最近更新 更多