9

我正在使用AntiForgeryToken辅助方法。根据我对 AntiForgeryToken 的了解,它是会话基础,因此每个用户都有相同的令牌,但另一个用户将有不同的令牌(前提是您对所有表单使用相同的盐)。我的“问题”是AntiForgeryToken为具有相同盐的同一用户生成不同的令牌。例如 ...

控制器

public ActionResult Test()
{
    return View();
}

看法

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken("Salty!")
}

输出请求 #1

<input name="__RequestVerificationToken" type="hidden" value="K1sijFuYvyGUJjGg33OnLjJaU3tFpGFDutRt9TOFSkZ6FcrhJMMQPnOqjIHuTwBXs/sPBXEiE+1qyV9l63nnSO161b+OtLbaBoPC7K3/7wxtnuSY+N0o/fqBgVoDyac4dNVp+OvanKBSrHINKfc3WEg9269BHOJNzFowC6Aeac/afAGTGrBypxUHfqrKVowD" />

输出请求 #2

<input name="__RequestVerificationToken" type="hidden" value="mOpP6LMQXnCmjr5/Wdtnhguh3PyZxWj7GWf8LYzZXPKcJBBT+DbAHvynquSD65O0DBw1RKR7DxCNg372ukftCOWms+o75CraMyFMnvjGk7RU+znIQm05eRQvr5H6d/MDyn+0DWm3jLnMBM9GplsgMRqbdAHzSe69/cS2x9A4X/9jFTZQHUWXXHUr0xewF8Rk" />

使用相同盐的相同会话的密钥不同。我对 CRSF 保护有根本的误解吗?或者这是一个新功能?

4

1 回答 1

6

反 XSRF 令牌通过将相同的随机值加密到会话 cookie 和您的表单中来工作。会话 cookie 仅在您从您生成的表单中发帖时提交。

这种方法也适用于所有服务器共享加密密钥的服务器群(在负载平衡场景中)。验证仅通过比较来自发布的表单数据的解密值和来自发布的会话 cookie 的解密值来进行。这称为双重提交cookie方法。

所以每个请求得到不同的值是很正常的。这是一篇关于 ASP.NET MVC XSRF 令牌的好文章。

于 2012-07-03T15:14:03.290 回答