3

すべてのフォームがある基本的な MVC プロジェクトでは、特定のユーザー セッションのすべての@Html.AntiForgeryToken()フォームでトークン (Cookie) の値が常に同じであることがわかります。何故ですか?私はそれを部分的に理解しています(そうしないと、たとえば戻るボタンで多くの問題が発生します)。しかし、「salt」を使用してフォームごとに異なるものにしないのはなぜですか。

「このメソッドは非推奨です。代わりに AntiForgeryToken() メソッドを使用してください。カスタム データをトークン内に埋め込むように指定するには、静的な AntiForgeryConfig.AdditionalDataProvider プロパティを使用してください。」

なぜそんなに巨大なのですか (私の例では 207 バイト、ユーザー ID 名は 7 文字です)。標準のセッション ID はもっと短い (41)。

4

1 に答える 1

3

ユーザー セッションに固有である必要があるだけの理由は、CSRF 脆弱性を標的とするエクスプロイトがどのように機能するかによるものです。

基本的に、CSRF は、悪意のあるユーザーによって事前に設定されたフォーム値に依存しています。悪意のあるユーザーは、通常は GET パラメータとしてフォームの値のみを設定できます。正当なフォームに存在する可能性のある値を取得/読み取ることはできず、ユーザーの 207 の長さのコードを確実に推測することもできません。

例外は、悪意のあるユーザーがこの「ライブ」情報を何らかの方法で取得できる XSS 脆弱性がある場合です。しかし、XSS の脆弱性が存在するため、とにかく CSRF を使用する必要はほとんどありません。

したがって、各ユーザー セッションが独自の値を持っている限り、悪意のあるユーザーが適切なフォーム送信を事前に作成することは事実上不可能です。

于 2012-12-13T23:12:46.250 に答える