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


145

私はこのトピックに関する記事や投稿(SOを含む)をすべて見てきましたが、主流のコメントは、同一生成元ポリシーがドメイン間でフォームPOSTを防止するというものです。同じ起源のポリシーがフォームの投稿に適用されないことを誰かが示唆しているのを見た唯一の場所はここです。

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

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

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

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


はい、攻撃者はそれを行うことができます...通常のWebブラウザーを使用します。
マイケルハンプトン

「Webサイトにパスワードを投稿しないでください」というRFCがないのと同じ理由で、RFCがおそらくないでしょう。Web標準は、複数の関係者が協力して何かを達成する必要がある場合にのみ必要です。同じ発信元ポリシーは、ユーザーがハッキングされるのを防ぐ「セキュリティのベストプラクティス」の複雑なセットです。
Ciro Santilli郝海东冠状病六四事件法轮功

@Ciroはっきり言ってください。他のサイトへのクロスポストのルールは、複数の関係者に影響を与えません。霧の名言はいらない。
リトルエイリアン

回答:


175

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

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

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

詳細については、ウィキペディアを参照してください


18
古い質問を上にドラッグして申し訳ありません。JSを使用してアクションが変更され、フォームがボタンを使用して投稿された場​​合はどうなりますか?それは成功したクロスドメイン投稿を可能にしますか?
Chris

私の知る限り、それは問題ではないはずですが、私はそれを自分で試したことはありません。調べるのは面白いでしょう。
Suresh Kumar 2013

2
私も同じ考えです。私は実際にセキュリティ、フォームを悪意のある場所に投稿するようにアクションを変更するサードパーティのJS /ウイルスが心配でしたが、これはクロスドメインの任意の支払い受領フォームで実行でき、結果は同じになることに気付きました。ここでのレッスン:サードパーティのJSファイルを確認してください;)
Chris

20
つまり、はい、クロスドメインPOSTが許可されます。
クリスチャンダベン2014

17
-1の場合:同一生成元ポリシーは、別のURL(異なるプロトコルまたはドメインまたはポート)への要求の送信とは関係ありません。それは、別のURLからの応答データへのアクセス(読み取り)を制限すること(それにより、JavaScriptでドキュメントを更新できないようにすること)他のURLからのセキュリティトークンを持つフォーム)。
Mohsenme、2015年

43

任意のGETまたはPOSTリクエストを作成し、被害者のブラウザがアクセスできる任意のサーバーに送信することが可能です。これには、プリンターやルーターなど、ローカルネットワーク上のデバイスが含まれます。

CSRFエクスプロイトを構築するには多くの方法があります。 メソッドを使用して、単純なPOSTベースのCSRF攻撃を送信できます.submit()クロスサイトファイルアップロードなどのより複雑な攻撃CSRF攻撃、xhr.withCredentals動作のCORS使用を悪用します

SOPはJavaScript がクライアントのリクエストに対するサーバーの応答を読み取ることに関係しているため、CSRFはJavaScrip t の同一生成ポリシーに違反しません。CSRF攻撃は応答を気にせず、副作用や、管理ユーザーの追加やサーバーでの任意のコードの実行など、リクエストによって生成される状態変化を気にします。

OWASP CSRF防止に関するチートシートで説明されている方法のいずれかを使用して、リクエストが保護されていることを確認してください。CSRFの詳細については、CSRFのOWASPページを参照してください


明確にするために質問を更新しました。また、あなたが与えたWordPressリンクには、クロスドメインYからではなく、同一生成元X内から開始されたエクスプロイトが含まれているので、私が見たシナリオからは適切ではありません。
ブレントアリアス

@Brent Ariasはい、1と2で説明していることは、CSRF攻撃が実行することとまったく同じです。おそらく、提供されたCSRFエクスプロイトの1つを実行して、トラフィックをスニッフィングする必要があります。私は私の投稿を更新しました。これらの質問に正確に回答するため、提供されたすべてのリンクをお読みください。「クロスサイトリクエストフォージェリ」(CSRF)攻撃のポイントは、リクエストが別のドメインから発信されていることです。提供されるすべてのエクスプロイトは、この基本的な要件を完全に満たします。
Mikey

16

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

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

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

良い例:ここに

そしてMozillaからの良いドキュメント:ここ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.