171

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

より「公式」または正式な情報源からの回答が欲しいです。たとえば、same-origin がフォーム POST にどのように影響するか、または影響しないかを説明している RFC を知っている人はいますか?

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

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

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

4

3 に答える 3

194

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

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

また、フォームの投稿に JavaScript が関与していない場合、同一オリジン ポリシーは適用されません。

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

于 2012-07-11T03:14:17.670 に答える
18

同一オリジン ポリシーは、リクエストを別の URL (異なるプロトコル、ドメイン、またはポート) に送信することとは関係ありません。

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

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

良い例:こちら

Mozilla からの優れたドキュメント:こちら

于 2015-05-07T23:09:59.303 に答える