2011-10-26 28 views
2

クロスサイトリクエストの偽造を防ぐために、一部のフォームでAntiForgeryTokenを使用し始めました。しかし、私はいくつかの奇妙な振る舞いをしているし、ちょうどこれがバグかどうかを明らかにしたいと思っています。私は自分のフォームでHtml.AntiForgeryToken()コールを使用しています。フォームが投稿するアクションメソッドで[ValidateAntiForgeryToken]属性を使用します。私はこの時点で塩を使用していません。AntiForgeryTokenとValidateAntiForgeryTokenで予期しない動作が発生しました

Html.AntiForgeryToken()は、__RequestVerificationTokenの名前と__RequestVerificationToken_Lw__という名前の隠し入力を生成します。どちらも同じ値を含む必要があります。

私はしかし、経験しています動作があること:

  1. クッキーが常に関係なく、ページ
  2. 隠し入力はあなたが得るたびに異なる値を持つのGET 何回同じ値を持っていませんページ
  3. ValidateAntiForgeryTokenは、毎回、CSRFシナリオの 異なるサイトから検証します。
  4. 私は外国人のサイトに隠された入力の値を変更した場合は、 トークンは(期待される動作を、しかし、隠された入力/クッキー値が異なる場合、なぜそれが を検証していますか?)検証しません

誰でもアイデアがありますか?

+0

[OK]を、ちょうどhttp://stackoverflow.com/questions/7186253/why-is-antiforgerytokens-hidden-field-not-same-as-ましたそのマシンでは、別々にシリアライズされていることを示すマシン上のクッキーであるため、異なる値を含むように見えます。しかし、これは私のクッキーの値が決して変更されない理由を説明していません(私はそれを削除し、ページを再取得するときに新しいものが生成されます)。 – coalvilledave

+0

この現象は、セキュリティ保護された要求でのみ発生するようです。 – coalvilledave

答えて

2

番号3では、CSRFシナリオに隠れたフィールドを含めていますか?

AntiForgeryTokenの安全性は、隠された入力がドメインによって提供されるページにのみ存在し、別のドメインによってコピーまたはキャプチャされないことです。あなたが隠れた入力を渡すテストを嘲笑した場合、それは有効なテストではありません。

私はあなたがフィル・ハークからこの記事を読むことをお勧め:Anatomy of a Cross-site Request Forgery Attack

+0

CSRFサイトでコードをそのまま(隠しフォームフィールドで)持ち上げて、フォームを送信したときに、常にサーバーで検証されました。明らかに、コードが存在しない場合、期待どおりに検証されません。しかし、クッキーの価値が同じである理由はまだ分かりません。 – coalvilledave

関連する問題