AntiForgeryToken如何在幕后工作?

时间:2014-07-03 18:17:42

标签: c# asp.net

我了解CSRFAntiForgeryToken的基本知识。

我也知道有许多相似的questions,但似乎没有一个描述实现细节,这是我感兴趣的部分。

每次调用Html.AntiForgeryToken()时,它都会生成一个新的随机标记:

  1. 我可以同时拥有多个有效令牌吗? (我认为这是肯定的)
  2. 我可以使用其他形式的任何令牌吗? (我认为这是肯定的)
  3. 我可以多次重复使用同一个令牌吗?
  4. 每次令牌都是随机的,有没有安全理由?它不是整个会话的相同标记吗?
  5. 令牌存储在cookie中

    1. 当我的页面中有多个表单和令牌时,是否表示我有多个cookie或只有一个包含所有活动令牌的cookie?
    2. 也...

      1. 如何生成令牌,是否可以手动验证。

3 个答案:

答案 0 :(得分:1)

对于您的上一个问题,您可以使用以下内容验证AntiForgeryTokens:

System.Web.Helpers.AntiForgery.Validate(cookie.Value, formValue);

答案 1 :(得分:1)

  

1.我可以同时拥有多个活动令牌吗? (我认为这是肯定的)

- >是。

  

2.我可以使用其他形式的任何令牌吗? (我认为这是肯定的)

- >是。

  

3.我可以多次重复使用相同的令牌吗?

- >简短的回答是肯定的。答案很长:这取决于多种因素,如果,

,则必须重新生成令牌
Your cookie expires
Your user identity has changed.       
Your additional data provider has decided that your token is no  
longer valid.
  

4.每次令牌都是随机的,有一个安全原因吗?它可能不是整个会话的相同标记吗?

- >您不希望任何人能够预测您的令牌。请记住,cookie令牌没有内置的自动过期。

  

1.当我的页面中有多个表单和令牌时,是否意味着我有多个cookie或只有一个包含所有活动的cookie   令牌?

- >在任何给定的时间点,只有一个cookie将在会话中处于活动状态, 该cookie具有SecurityToken属性。页面上的每个有效 af标记都具有相同的SecurityToken(否则验证将失败)。

  

1.如何生成令牌,是否可以手动验证。

我建议阅读帖子explaining the internals herecode here

我实际上在想为什么你需要在表格中使用相同的af令牌..如果你分享你的场景可能会有所帮助。

答案 2 :(得分:0)

回答 ASP.NET Core 以防万一有人偶然发现了这篇来自 Google 的帖子。

以下内容基于此article

<块引用>

我可以同时拥有多个活动令牌吗?

是的。如果您打开两个选项卡并点击同一个 URL 返回一个页面,该页面包含一个包含防伪标记的表单,那么每个页面的 HTML 中都会有一个不同的标记。但是您的 cookie 中将具有相同的标记。

<块引用>

我可以以其他形式使用这些令牌吗?

是的。您可以通过点击两个选项卡中的 URL 来测试这一点,打开开发者选项并换出令牌,应用程序不会知道任何更好的。

<块引用>

我可以多次使用同一个令牌吗?

是的。只要 HTML 中的标记与您的 cookie 一起生成,那么如果您使用相同的 cookie,您就可以像以前一样在 HTML 中使用相同的标记。

<块引用>

令牌每次都是随机的是否有安全原因?不能 整个会话都是一样的吗?

请参阅 Harsh Gupta 接受的答案。

<块引用>

当我的页面中有多个表单和令牌时,是否意味着我有 多个 cookie 还是只有 1 个包含所有活动令牌的 cookie?

请参阅 Harsh Gupta 接受的答案。

<块引用>

令牌是如何生成的,是否可以手动验证。

这是我上面链接的文章的摘要:

  • 使用随机数生成器构建字节数组。

  • 根据第 1 步生成唯一的数组。

  • 加密数组。

  • 在加密数组中添加一个魔法标头和 defaultKeyId。

  • Base64URL 对加密数组进行编码并将其用作令牌 字符串。

相关问题