私はAntiForgeryToken
ヘルパーメソッドを使用しています。私がAntiForgeryTokenについて理解していることは、各ユーザーが同じトークンを持ち、別のユーザーが異なるトークンを持つように(すべてのフォームに同じ塩を使用する場合)、セッションベースだということです。私の "問題"は、AntiForgeryToken
が同じユーザーのために同じ塩で異なるトークンを生成しているということです。たとえば...要求ごとにAntiForgeryTokenの変更
Contoller
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の保護について根本的な誤解がありますか?それともこれは新しい機能ですか?
したがって、新しいトークンが発行されたときにサーバー上のセッションデータが変更されますか?私のクッキーの価値はすべて同じままです。 __RequestVerificationToken_Lw__のCookie値が変更されると思いました。 –
いいえ、サーバーはクライアントにCookieを設定します。クライアントは、投稿時に同じ値を2回送信します。フォームデータとCookieで一度コード化されます(POST時にCookieがサーバーに転送されます)。サーバーは暗号化キーのみを認識していました。反XSRF目的のために何も格納しません。 – m0sa
セッションにトークンを保存せず、クライアントにそれを送信しない理由は何ですか?何かのように:AntiForgery.GetTokens(null、cookieToken、out formToken); return cookieToken + ":" + formToken;それから、セッションにそれを保存しますか? –