2017-08-27 12 views
0

私はまだ偽造トークンがMVCでどのように動作するのか分かりません。 MSDNより。偽造トークンを無効にするためにクッキー値を手動で設定しますか?

偽造防止トークン

CSRF攻撃を防ぐのを助けるために、ASP.NET MVCはまた、要求の検証トークンと呼ばれる、偽造防止トークンを使用しています。

  1. クライアントは、フォームを含むHTMLページを要求します。
  2. サーバーには、応答に2つのトークンが含まれています。 1つのトークンがクッキーとして送信されます。もう一方は隠れたフォームフィールドに配置されます。トークンは無作為に生成され、敵対者は値を推測できません。
  3. クライアントがフォームを送信すると、両方のトークンをサーバーに送り返す必要があります。クライアントはCookieトークンをクッキーとして送信し、フォームデータ内にフォームトークンを送信します。
  4. 要求に両方のトークンが含まれていない場合、サーバーは要求を許可しません。ここで

隠しフォームトークンを使用してHTMLフォームの例です:

<form action="/Home/Test" method="post"> 
<input name="__RequestVerificationToken" type="hidden" 
     value="6fGBtLZmVBZ59oUad1Fr33BuPxANKY9q3Srr5y[...]" />  
<input type="submit" value="Submit" /> 

私の質問は、以来、私たちは、ソースコードを見ることで簡単に隠されたトークン値を見つけることができるということです(どのブラウザでもF12)。次に、開発者ツール(Ctrl-Shift-Jまたはツール - >開発者ツール) - >コンソールを使用してクッキーを手動で設定し、javascriptコマンドを入力できます。

document.cookie = "keyofcookie = valueofcookie" ?

私たちは手動でトークンを設定しているため、偽造防止技術を無効にすることはできますか?

答えて

1

そのCookieはHttpOnlyであり、すべての最新のブラウザがHttpOnlyを実装しているので、javascriptから設定することはできません。また、Cookieトークンとフォームトークンの両方には、異なる基本64暗号化情報が含まれています。復号化はサーバ側の処理になります。

Moresoこれらのトークンは、等しいかどうか比較されません。彼らはデータのためにお互いを補完します。また、あなたは完全な記事を読まなかった。 MVCには、トークンを検証する独自のメソッドがあります。

以下のリンクが役立つかどうかを確認してください。

https://www.codeproject.com/Articles/793384/ASP-NET-Anti-Forgery-Tokens-internals

+0

私はクッキーに強くない。では、CookieがHttpOnlyであることをどのように知っていますか? – Bigeyes

+0

あなたのように、私もインターネットでそれを読んでいます。しかし、今、あなたが尋ねたので、実際のマイクロソフトのファイルソースコードへのリンクがあります。ここにオープンソースに関するMSのリンクがあります。 https://blogs.msdn.microsoft.com/japan/exchange/index.aspx HttpOnly trueをチェックしてください。 http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/9a83b63f3f889e3f2c979274fe3e8f7610e06b98#src/System.Web.WebPages/Helpers/AntiXsrf/AntiForgeryTokenStore.cs – Amit

0

documentationが言うように:

偽造防止トークンを悪意のあるページが同一生成元ポリシーによる ユーザーのトークンを、読み取ることができないので、動作します。 (Same-origin policies )2つの異なるサイトでホストされているドキュメントが他の各コンテンツにアクセスするのを防ぐためです。前述の例では、悪意のあるページは の要求をexample.comに送信できますが、応答は読み取れません。)

つまり、クッキーの値をコピーして別の場所に使用すると、そのポリシーのために機能しません。

+0

私はまだ文章を理解していません。「悪意のあるページはユーザーのトークン、 '。 'var x = document.cookie;'というスクリプトでクッキーを読むことができないということですか? – Bigeyes

関連する問題