我了解CSRF和AntiForgeryToken的基本知识。
我也知道有许多相似的questions,但似乎没有一个描述实现细节,这是我感兴趣的部分。
每次调用Html.AntiForgeryToken()时,它都会生成一个新的随机标记:
令牌存储在cookie中
也...
答案 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 here 和code 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 对加密数组进行编码并将其用作令牌 字符串。