web-dev-qa-db-ja.com

理解の難しさSOPおよびCSRF

ここ で述べたように、CSRF攻撃はSOPとはほとんど関係がありません。ただし、 OWASP CSRFページ では、

幸い、同じ要求によるポリシー制限のため、この要求は最新のWebブラウザーでは実行されません。この制限はデフォルトで有効になっています。ただし、ターゲットWebサイトが、次のヘッダーを持つCORSを使用して攻撃者(または全員の)Originからのクロスオリジンリクエストを明示的に開いている場合を除きます。

また、Fetch/XMLHttpRequestを実行しようとしたときに、SOPによってブロックされた場合、リクエストがサーバーに届かなかったため、上記の最初のリンクの回答はまだ有効ですか?ありがとう

1
Sumanto Dinar

同じ生成元ポリシー は以下を許可します:

  • 通常、クロスオリジン書き込みが許可されています。例としては、リンク、リダイレクト、フォーム送信などがあります。一部のHTTPリクエストにはプリフライトが必要です。
  • 通常、クロスオリジン埋め込みが許可されています。 (例を以下に示します。)
  • 通常、クロスオリジン読み取りは許可されていませんが、埋め込みによって読み取りアクセスが漏洩することがよくあります。たとえば、埋め込み画像のサイズ、埋め込みスクリプトのアクション、または埋め込みリソースの可用性を読み取ることができます。

ここで重要な部分は「通常」と「一部のHTTPリクエストにはプリフライトが必要」です。

つまり、プリフライトが必要なため、「書き込み」アクションであってもPUTリクエストなどを実行できません。

これは、OWASPの記事にも書かれています。GETとPOST以外のHTTPメソッドではCSRFを使用できません。

ちなみに、あなたはcanxmlhttprequestを使用してPOSTリクエストを送信することができます:

// hosted on evil.com:
<script>
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://example.com/test.php', true);
xhr.send("test");
</script>

これにより、ブラウザコンソールにSOP違反に関するエラーが表示されます。ただし、違反はではありませんPOST要求((が発行されますが発行されます)が、応答を読み取る可能性(これは許可されていません)。

SOPは書き込みアクションを禁止しないため、それは実際にはCSRFとは関係ありません(これはすべて書き込みアクションに関するものです)。ただし、一部のCSRF攻撃(たとえば、PUT要求または要求)を妨害しますSOPは、CSRF防止で使用できます(たとえば、カスタムヘッダーをチェックするか、PUTリクエストのみを使用する)。

1
tim