每个请求都有AntiForgeryToken更改

Ste*_*aly 8 .net c# security asp.net-mvc csrf

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

位指示

public ActionResult Test()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

视图

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken("Salty!")
}
Run Code Online (Sandbox Code Playgroud)

输出请求#1

<input name="__RequestVerificationToken" type="hidden" value="K1sijFuYvyGUJjGg33OnLjJaU3tFpGFDutRt9TOFSkZ6FcrhJMMQPnOqjIHuTwBXs/sPBXEiE+1qyV9l63nnSO161b+OtLbaBoPC7K3/7wxtnuSY+N0o/fqBgVoDyac4dNVp+OvanKBSrHINKfc3WEg9269BHOJNzFowC6Aeac/afAGTGrBypxUHfqrKVowD" />
Run Code Online (Sandbox Code Playgroud)

输出请求#2

<input name="__RequestVerificationToken" type="hidden" value="mOpP6LMQXnCmjr5/Wdtnhguh3PyZxWj7GWf8LYzZXPKcJBBT+DbAHvynquSD65O0DBw1RKR7DxCNg372ukftCOWms+o75CraMyFMnvjGk7RU+znIQm05eRQvr5H6d/MDyn+0DWm3jLnMBM9GplsgMRqbdAHzSe69/cS2x9A4X/9jFTZQHUWXXHUr0xewF8Rk" />
Run Code Online (Sandbox Code Playgroud)

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

m0s*_*0sa 5

反XSRF令牌通过将相同的随机值加密到会话cookie和表单上来工作.只有当您从生成的表单发布帖子时,才会提交会话cookie.

此方法也适用于服务器场(在负载平衡方案中),其中所有服务器共享加密密钥.验证仅通过比较发布的表单数据中的解密值和发布的会话cookie中的解密值来工作.这称为双提交cookie方法.

因此,每个请求获得不同的值是很正常的.这是一篇关于ASP.NET MVC XSRF令牌的好文章.