この 3 日間、XMLHttpRequest を使用してクロス ドメイン リクエストを作成する方法を研究しました。最良の代替手段は、私がすでに使用している JSONP を使用することです。
しかし、どこにも答えが見つからないという質問がまだあります。私は何百もの投稿(SOを含む)を読みましたが、適切な責任のある回答はありません(適切な参照付き)。ここの誰かが助けてくれることを願っています。
セキュリティ上の理由により、ドメイン example.com から yyy.com への Ajax リクエストを作成して、必要なデータを取得できないことを多くの Web サイトで読みました。それは非常に明確であり、私はそれについて何の疑問も持っていません。しかし、問題は、localhost で以下のコードを実行するときです (したがって、私のドメインは "localhost" であり、別のドメインからデータを要求することはできません)。
xhReq = new XMLHttpRequest();
xhReq.open("GET","http://domain.com.br?parameter",true);
xhReq.send(null);
Firebug Net タブを調べると、リクエストがブロックされていないことがわかりました! 明確に要求されました。信じられませんでした。そこで、domain.com.br/log.php にファイルを作成し、自分のドメインにヒットしたリクエストをログに記録できるようにしました。驚いたことに、私が localhost に送信したすべてのリクエストが私の domain.com.br にヒットしていました。応答をフェッチしようとしたとき、Chrome と FIrebug ブラウザのオリジン ポリシーが同じであるため、実際には応答を取得できませんでした。しかし、応答を操作できなかったにもかかわらず、要求が実際に Web サーバーにヒットしたことに本当に驚きました。
さらに驚くべきことに、domain.com.br/log.php が 1MB ほどの巨大な応答を生成した場合、ブラウザが Web サーバーから 1MB 全部をダウンロードし、最後に「アクセスが拒否されました」というメッセージが表示されることが Firebug によって示されました。期待される。同じオリジンポリシーがそのデータの読み取りを禁止している場合、なぜすべてのファイルをダウンロードするのでしょうか。
最後に、私が読んだすべての Web サイトと仕様には、ターゲット ドメインがソース ドメインと一致しない場合、Ajax を使用してリクエストがブロックされることが明確に記載されていることに驚かされます。しかし明らかに、私の実験では、応答データにアクセスできないにもかかわらず、要求は完了しています。
私が腹を立てているのは、毎日何千ものビューを持つ Web サイトがこの 3 行のコードを実行し、ユーザーが別の Web サイトのページを要求するだけで、友好的でない Web サイトで巨大な Ddos 攻撃を引き起こす可能性があるという大きなセキュリティ ホールを開く可能性があることです。ブラウザはリクエストをブロックしないため、短い間隔で。
このスクリプトを IE 7、8、および 9 と最新の Chrome および最新の Firefox でテストしましたが、動作は同じです。リクエストが完了し、ブラウザはすべてのレスポンスをダウンロードしますが、SOP を実行できません。
仕様が間違っている理由、または私が間違っていることを理解している理由を誰かが説明してくれることを願っています!