このトピックに関する記事や投稿(SOを含む)をすべて見てきましたが、一般的なコメントは、同一起源ポリシーにより、ドメイン全体でPOSTというフォームが禁止されていることです。私が誰かに会った唯一の場所は、same-Originポリシーがフォーム投稿に適用されないことを示唆している、 is here 。
もっと「公式」または正式な情報源からの回答が欲しいです。たとえば、同じOriginがフォームPOSTにどのように影響するか、または影響しないかを扱うRFCを誰もが知っていますか?
説明:GETまたはPOSTを構築して、任意のドメインに送信できるかどうかは尋ねません。私は尋ねています:
ちなみに、same-OriginがフォームのPOSTに影響を与えない場合、偽造防止トークンが必要な理由がいくらか明らかになります。攻撃者が単純にHTTP GETを発行して偽造防止トークンを含むフォームを取得し、その同じトークンを含む不正なPOSTを作成できると信じるのは簡単すぎると思われるため、「ある程度」と言います。コメント?
同じOriginポリシーは、ブラウザ側のプログラミング言語にのみ適用されます。 JavaScriptを使用してOriginサーバーとは異なるサーバーに投稿しようとすると、同じOriginポリシーが作用しますが、フォームから直接投稿すると、アクションは次のような別のサーバーを指します:
<form action="http://someotherserver.com">
フォームの投稿にJavaScriptが含まれていない場合、同じOriginポリシーは適用されません。
詳細については、 wikipedia を参照してください
任意のGETまたはPOSTリクエストを作成し、それを任意のサーバー被害者のブラウザーにアクセス可能に送信することが可能です。これには、プリンターやルーターなど、ローカルネットワーク上のデバイスが含まれます。
CSRFエクスプロイトを作成する方法は多数あります。 単純なPOSTベースのCSRF攻撃 は、.submit()
メソッドを使用して送信できます。 クロスサイトファイルアップロードCSRF攻撃 などのより複雑な攻撃は、 CORSでのxhr.withCredentals動作の使用 を悪用します。
SOPはJavaScriptに関係しているため、CSRFは JavaScripの同じ元のポリシー tに違反しませんreadingクライアントのリクエストに対するサーバーの応答。 CSRF攻撃は応答を気にせず、side-effect、または管理ユーザーの追加やサーバーでの任意のコードの実行など、リクエストによって生成される状態の変化を気にします。
OWASP CSRF Prevention Cheat Sheet で説明されている方法のいずれかを使用して、リクエストが保護されていることを確認してください。 CSRFの詳細については、 CSRFのOWASPページ を参照してください。
Same Originポリシーは、別のURL(異なるプロトコル、ドメイン、またはポート)へのリクエストの送信とは関係ありません。
すべては、別のURLからの応答データへのアクセスの制限(読み取り)についてです。そのため、ページ内のJavaScriptコードは、任意のドメインに投稿したり、そのページ内のフォームを任意の場所に送信したりできます(フォームが別のURLのiframeにない場合)。
しかし、これらのPOSTリクエストを非効率にするのは、これらのリクエストが偽造防止トークンを欠いているため、他のURLによって無視されることです。さらに、JavaScriptがAJAXリクエストを被害者のURLに送信することにより、そのセキュリティトークンを取得しようとすると、Same Origin Policyによってそのデータにアクセスできなくなります。
良い例: here
そして、Mozillaの優れたドキュメント: here