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;那麼只需將它存儲在會話中? –