每个请求都有AntiForgeryToken更改

时间:2012-07-03 15:04:32

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

我正在使用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" />

对于具有相同salt的相同会话,键是不同的。我对CRSF保护有根本的误解吗?或者这是一个新功能?

1 个答案:

答案 0 :(得分:5)

反XSRF令牌的工作原理是将相同的随机值加密到会话cookie和表单中。只有当您从已生成的表单发布帖子时,才会提交会话cookie。

这种方法也有效,例如在服务器场(在负载平衡方案中),其中所有服务器共享加密密钥。验证仅通过比较发布的表单数据中的解密值和发布的会话cookie中的解密值来工作。这称为double submitted cookie方法。

因此,每个请求获得不同的值是很正常的。关于ASP.NET MVC XSRF令牌的This is a nice post