9

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 保護について根本的な誤解がありますか? それともこれは新しい機能ですか?

4

1 に答える 1

6

アンチ XSRF トークンは、同じランダム値をセッション Cookie とフォームに暗号化することで機能します。セッション Cookie は、生成したフォームから投稿を行う場合にのみ送信されます。

このアプローチは、たとえば、すべてのサーバーが暗号化キーを共有するサーバー ファーム (負荷分散シナリオ) でも機能します。検証は、投稿されたフォーム データからの復号化された値と、投稿されたセッション Cookie からの復号化された値を比較することによってのみ機能します。これは、ダブル サブミット クッキー方式と呼ばれます。

したがって、各リクエストが異なる値を取得するのはごく普通のことです。これは、 ASP.NET MVC XSRF トークンに関する素晴らしい投稿です。

于 2012-07-03T15:14:03.290 に答える