我正在使用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保护有根本的误解吗?或者这是一个新功能?
答案 0 :(得分:5)
反XSRF令牌的工作原理是将相同的随机值加密到会话cookie和表单中。只有当您从已生成的表单发布帖子时,才会提交会话cookie。
这种方法也有效,例如在服务器场(在负载平衡方案中),其中所有服务器共享加密密钥。验证仅通过比较发布的表单数据中的解密值和发布的会话cookie中的解密值来工作。这称为double submitted cookie方法。
因此,每个请求获得不同的值是很正常的。关于ASP.NET MVC XSRF令牌的This is a nice post。