私はここ3日間、XMLHttpRequestを使ってクロスドメインリクエストを作成する方法を研究しました。私がすでに使っているJSONPを使用するのが最良の選択肢です。クロスドメインAJAXリクエストはブロックされていません:これはセキュリティ上の脆弱性ですか?
しかし、まだ答えが見つからないという質問が残っています。私は何百もの投稿(SOを含む)を読んでおり、誰も良い責任を負う回答はありません。誰かが助けてくれることを願っています
セキュリティの理由から、私はドメインexample.comからyyy.comにAjaxリクエストを行い、私が望むデータを得ることができないという多くのウェブサイトを読んでいます。それは非常に明確で、私はそれについて疑問を持っていません。しかし、私のlocalhostで以下のコードを実行すると問題が発生します(私のドメインは "localhost"なので、別のドメインのデータを要求することはできません)。
xhReq = new XMLHttpRequest();
xhReq.open("GET","http://domain.com.br?parameter",true);
xhReq.send(null);
Firebug Netタブを調べると、リクエストがブロックされていないことがわかりました。それは明らかに要求された。私は信じられませんでした。だから私はdomain.com.br/log.phpに私のドメインにヒットしたリクエストを記録できるファイルを作成しました。驚いたことに、私がローカルホストを撃っているすべての要求が私のdomain.com.brに当たっていました。応答を取得しようとしたとき、ChromeとFIrebugブラウザの元のポリシーが同じであるため、実際にはそれを取得できませんでした。しかし、私は本当にレスポンスを操作することができないにもかかわらず、リクエストが実際にウェブサーバーに当たったことに驚いていました。
もっと驚くべきことに、domain.com.br/log.phpが1MBのような巨大なレスポンスを生成した場合、私のファイヤーバグは、ブラウザがWebサーバーから1MBをすべてダウンロードしたことを示し、アクセスが拒否されました "。だから、なぜ同じ発信元ポリシーがそのデータの読み込みを禁止していれば、すべてのファイルをダウンロードするのですか?
最後に、私が驚いたのは、私が読んだすべてのウェブサイトと仕様では、ターゲットドメインがソースドメインと一致しない場合にリクエストがAjaxを使用してブロックされているということです。しかし、明らかに、私の実験では、応答データにアクセスすることはできませんが、要求は完了しています。
毎日何千ものビューを持つウェブサイトがこの3行のコードを実行し、不快なウェブサイトで巨大なDdos攻撃を引き起こすような大きなセキュリティホールが開かれる可能性があるということです。ブラウザはリクエストをブロックしないため、短い間隔で別のWebサイトの
私はこのスクリプトをIE 7,8,9とChrome最新版とFirefox最新版でテストしました。動作は同じです。要求は完了し、ブラウザはSOPを実行できない状態ですべての応答をダウンロードします。
スペックが間違っているのか、私が間違って理解しているのか、誰かが私に説明できることを願っています!
[同じ発信元ポリシー](http://www.w3.org/Security/wiki/Same_Origin_Policy):同じ発信元ポリシーの下では、情報のクロスサイト送信も危険です。これは、サイトリクエストフォージェリー(CSRF)とクリックジャッキー。同じ発信元ポリシーは、情報のクロスサイト送信を禁止するとサイト間のハイパーリンクが禁止されるため、これらのセキュリティ脆弱性は情報の受信と同じ方法で対処できません。 **「送信を許可」しないと、各起源が自分自身にしかリンクできないので、「ウェブ」は全くありません。** – Andreas
@アンドレアスは助けてくれてありがとうございますが、私ははっきりしないかもしれないと思います。私は、ブラウザが画像、スクリプト、CSSシートを埋め込むような外部ドメインへのリクエストを許可するべきだと考えています...しかし、Ajaxで許可することは、Dos攻撃がどのWebサーバーに対しても実行できるため、大きな脅威です。仕様は、常に、ajaxを使用して外部ドメインに対して行われた要求は常にブロックされるべきだと言います。私が証明したように間違っている原因は、リクエストがブロックされておらず、レスポンスだけです。 – Samul
非表示のiframeと動作を比較します。コンテンツが別のドメインのコンテンツであれば、JavaScriptではクロスドメインにアクセスできませんが、iframeのコンテンツは「完全にダウンロード」されます。私はXHRの詳細についてはわかりませんが、制限されたデータの転送を開始する既存の方法よりも、このdownload-then-block *はもはや問題ではないようです。 – user2864740