web-dev-qa-db-ja.com

クロスドメインフォームのPOST

このトピックに関する記事や投稿(SOを含む)をすべて見てきましたが、一般的なコメントは、同一起源ポリシーにより、ドメイン全体でPOSTというフォームが禁止されていることです。私が誰かに会った唯一の場所は、same-Originポリシーがフォーム投稿に適用されないことを示唆している、 is here

もっと「公式」または正式な情報源からの回答が欲しいです。たとえば、同じOriginがフォームPOSTにどのように影響するか、または影響しないかを扱うRFCを誰もが知っていますか?

説明:GETまたはPOSTを構築して、任意のドメインに送信できるかどうかは尋ねません。私は尋ねています:

  1. chrome、IE、またはFirefoxがドメイン「Y」のコンテンツがドメイン「X」にPOSTを送信することを許可する場合
  2. POSTを受信するサーバーが実際にフォーム値をまったく見る場合。これは、オンラインディスカッションの大半がサーバーが投稿を受け取ったとテスターを記録しているが、フォームの値はすべて空であるか削除されているためです。
  3. 公式ドキュメント(RFCなど)では、期待される動作を説明しています(ブラウザーが現在実装しているものに関係なく)。

ちなみに、same-OriginがフォームのPOSTに影響を与えない場合、偽造防止トークンが必要な理由がいくらか明らかになります。攻撃者が単純にHTTP GETを発行して偽造防止トークンを含むフォームを取得し、その同じトークンを含む不正なPOSTを作成できると信じるのは簡単すぎると思われるため、「ある程度」と言います。コメント?

130
Brent Arias

同じOriginポリシーは、ブラウザ側のプログラミング言語にのみ適用されます。 JavaScriptを使用してOriginサーバーとは異なるサーバーに投稿しようとすると、同じOriginポリシーが作用しますが、フォームから直接投稿すると、アクションは次のような別のサーバーを指します:

<form action="http://someotherserver.com">

フォームの投稿にJavaScriptが含まれていない場合、同じOriginポリシーは適用されません。

詳細については、 wikipedia を参照してください

157
Suresh Kumar

任意の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ページ を参照してください。

40
Mikey

Same Originポリシーは、別のURL(異なるプロトコル、ドメイン、またはポート)へのリクエストの送信とは関係ありません。

すべては、別のURLからの応答データへのアクセスの制限(読み取り)についてです。そのため、ページ内のJavaScriptコードは、任意のドメインに投稿したり、そのページ内のフォームを任意の場所に送信したりできます(フォームが別のURLのiframeにない場合)。

しかし、これらのPOSTリクエストを非効率にするのは、これらのリクエストが偽造防止トークンを欠いているため、他のURLによって無視されることです。さらに、JavaScriptがAJAXリクエストを被害者のURLに送信することにより、そのセキュリティトークンを取得しようとすると、Same Origin Policyによってそのデータにアクセスできなくなります。

良い例: here

そして、Mozillaの優れたドキュメント: here

14
Mohsenme