web-dev-qa-db-ja.com

ASP.NETは偽造防止トークンをどのように検証しますか

ASP.NETは、偽造防止トークンが有効かどうかをどのようにチェックするのでしょうか? ASP.NETがこれらのトークンをどこに保存するのですか?そして、それらはどのように保存されますか?

17
Steve

短いバージョンでは、生成されたトークンは2つの場所に保存されます。(a)cookie(b)隠しフォームの値。フォームが送信されると、これらの2つの値は互いに比較され、有効かどうかが判断されます。さらに読むには:

http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-(csrf)-attackshttp:// www。 codeproject.com/Articles/793384/ASP-NET-Anti-Forgery-Tokens-internals

25
TeamTam

受け入れられている答えよりも明確な段階的な説明( https://docs.Microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request- forgery-csrf-attacks

  1. クライアントは、フォームを含むHTMLページを要求します。
  2. サーバーは、応答に2つのトークンを含めます。 1つのトークンがCookieとして送信されます。もう1つは非表示のフォームフィールドに配置されます。攻撃者が値を推測できないように、トークンはランダムに生成されます。
  3. クライアントがフォームを送信するとき、両方のトークンをサーバーに送り返す必要があります。クライアントはCookieトークンをCookieとして送信し、フォームデータ内のフォームトークンを送信します。 (ユーザーがフォームを送信すると、ブラウザークライアントがこれを自動的に行います。)
  4. 要求に両方のトークンが含まれていない場合、サーバーは要求を許可しません。
12

上記の説明はすべて行われているわけではありません.AjaxRequestの場合、特にgetリクエストでの偽造防止は通常、比較のために非表示の値でフォームを送信しません。代わりに、同じ内容のヘッダー値を設定する必要がありますJavaScript経由のCookie。設定するヘッダー名はデフォルトでX-XRF-Tokenヘッダー[angularjsに関連]です...もちろん、APIを保護するために特定のドメインのみでCORSを無効にするか、有効にする必要があります。SAMEORIGINクリックジャックを避けるためにも設定する必要があります。

3
Ibrahim Magdy