7

この 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 を実行できません。

仕様が間違っている理由、または私が間違っていることを理解している理由を誰かが説明してくれることを願っています!

4

2 に答える 2

5

CORS に関係なく、要求を行うことができ、サーバーは応答を生成することができます。ただし、応答が非表示になる場合があります。balphaは最近、彼のブログでこれについて書いています。

同一生成元ポリシーは、必ずしもリクエスト自体を禁止するわけではありません。レスポンスにアクセスできないようにするだけです。悪意のあるサイトは、たとえば、ブラウザをリダイレクトしたり、フォームを送信したり、画像や iframe を含めたりすることができます。これらのすべての場合、サイトに対してリクエストが行われます。邪悪なサイトは応答を見ていません。

ある程度、ブラウザサーバーにリクエストを送信して、サーバーが「Access-Control-Allow-Origin」ヘッダーを提供しているかどうかを確認する必要があります。CORS はブラウザによって完全に実装されていることに注意してください。誰かがあなたのサーバーにリクエストを送信するためのコンソール アプリケーションを作成する可能性があるため、リクエストが自分のサイトからのみ送信されていることを確認するために CORS に依存するべきではありません。

于 2013-10-30T17:47:44.867 に答える
0

単純な画像ファイルで同じ効果 (あなたが言った dos 攻撃のようなもの) を実現できます。必ずしも XHR である必要はありません。別の Web サイトから画像ファイルをリンクし、何百万もの画像ファイルをページに配置し、ユーザーに表示してブームにします。

于 2013-10-30T17:56:40.807 に答える