8
我正在使用AntiForgeryToken
辅助方法。根据我对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保护有一个根本的误解吗?或者这是一项新功能?
所以它改变了服务器上的会话数据发出一个新的令牌时?我的cookies的所有值都保持不变。我认为__RequestVerificationToken_Lw__ cookie值会改变。 –
不,服务器在客户端上设置cookie。客户在发布时会发送相同的值两次。一旦在表单数据中编码并且在cookie中进行一次编码(Cookie在POST上被传送到服务器)。服务器只知道加密密钥。它不存储任何其他用于反XSRF目的的内容。 – m0sa
任何理由不只是在会话中存储令牌,也不会将其发送给客户端?例如:AntiForgery.GetTokens(null,out cookieToken,out formToken); return cookieToken +“:”+ formToken;那么只需将它存储在会话中? –