私はこれが初心者の質問であることに気づきますが、このimになると明らかにそれです。
ブラウザで、サイトAからCookieを受け取ったと想定します。次に、別のサイトBがJavaScriptを介してサイトAに呼び出しを行います(今のところ、リダイレクト/クリックはそのままにしておきます)。
その呼び出しには、サイトAのブラウザーに保存されたCookieも含まれますか、それともCookieは適切なドメインコンテキストを介してのみ送信されますか?
CSRFをよりよく理解し、説明しているものが実際のシナリオであるかどうかを評価しようとしています。 GETリクエストがべき等ではないfacebook.com/DELETE_EVERYTHINGなどのリダイレクトの場合、あまり実行できないことを理解しています。しかし、私はCSRFがカバーする他のケースと、POSTがCSRFを通じてどのように発生する可能性があるかを確認しようとしています。
私が説明しているものが有効であれば、CSRFトークンがどのように役立つかは理解していますが、その場合、そもそもなぜこれが許可されているのですか?
そうでない場合、どのようにしてCSRF POST=が発生しますか?
一般に、ブラウザは、サイトAにリクエストを送信するたびに、サイトAのすべてのCookieを送信します。
通常、リクエストがどこで発生したかは関係ありません。ただし、次の2つの場合があります。
XMLHttpRequest
またはfetch
)は、同一オリジンリクエストの場合はデフォルトでCookieを送信しますが、クロスオリジンリクエストの場合はデフォルトでは送信しません。ただし、それらをクロスオリジンに送信することを指定できます。samesite
フラグは、クロスオリジンリクエストを介して送信される状況を制限します。ただし、すべてのブラウザがまだサポートしているわけではありません。問題が発生する場合があります。「strict」モードでない限り、トップレベルのナビゲーション(リンクがクリックされたときやwindow.location.href
など)でcookieが送信されますセット)、GETベースのCSRFに対して脆弱なサイトを悪用する可能性があります。リクエストをHTTPとHTTPSのどちらで送信するかが問題になる可能性があります。Secureフラグが設定されたCookieはHTTPSのみを経由します。ただし、通常、セキュリティで保護されたサイトでは、攻撃者がCSRF攻撃を仕掛ける場所にHTTPSが必要です。
言い換えると:
ブラウザで、サイトAからCookieを受け取ったと想定します。次に、別のサイトBがJavaScriptを介してサイトAに呼び出しを行います(今のところ、リダイレクト/クリックはそのままにしておきます)。
その呼び出しは、サイトAのブラウザに保存されたCookieも伝送しますか、それともCookieは適切なドメインコンテキストを介してのみ送信されますか?
はい、リクエストAへのすべての呼び出しには、リクエストの送信元(上記の警告を除く)に関係なく、サイトAのCookieが含まれます。
POSTリクエストについては、それが発生するいくつかの方法があります。XHRまたはFetch APIを使用したCORS(クロスオリジン)リクエストについてはすでに触れました。 "しかし、これを行うと、Cookieが送信されます(「通常の」コンテンツタイプと動詞を使用し、カスタムヘッダーを使用しないと仮定します。それ以外の場合は、実際のリクエストを送信するかどうかのCORSプリフライトチェックがトリガーされます)。また、JavaScriptによって自動的に送信される、送信時にトップレベルページに移動しないように、iframeに埋め込まれた、完全に非表示のHTMLフォームも含まれます。フォームは任意の宛先とアクションを指定できるため、クロスオリジンを送信することは完全に可能ですPOST 1つで、Cookieが含まれます(上記のsamesite
やsecure
などの制限のみを対象とします)。