2011-01-30 6 views
47

この質問は、クロスソースリソース共有(CORS、http://www.w3.org/TR/cors/)に関連しています。CORSエラーをトラップすることは可能ですか?

CORSリクエストの作成中にエラーが発生した場合、Chrome(および他のブラウザも同様)がエラーコンソールにエラーを記録します。メッセージの例は次のようになります。

XMLHttpRequestはhttp://domain2.exampleをロードできません。 Origin http://domain1.exampleは、Access-Control-Allow-Originによって許可されていません。

プログラムでこのエラーメッセージが表示されるのでしょうか? try/catchでxhr.send()呼び出しをラップしようとしましたが、onerror()イベントハンドラも追加しようとしました。どちらもエラーメッセージを受信しません。

+1

これは可能なのかどうかは、ブラウザの機能であるため、javascriptの範囲を超えています。それ以外にも、盗聴に使うことができるセキュリティホールが発生する可能性があります。 –

+0

私もこれについて興味があります。 –

答えて

26

参照:

...だけでなく、CORSについてXHRレベル2での注意事項:

情報が意図的ですフィルタリングされる。

数か月後に編集:フォローアップのコメントに「理由」が表示されます。最初のリンクのアンカーにはいくつかの文字が欠落していて、私が参照していた文書のどの部分が見えないのか分かりませんでした。

これはセキュリティ上の問題です。機密性の高いHTTPヘッダーに情報が公開されるのを避けるためのものです。 CORSに関するW3Cのリンクは言う:

ユーザーエージェントは、の値のいずれかのフィールド名がASCIIの大文字と小文字を区別しない一致するシンプルなレスポンスヘッダまたはであるもの以外のすべてのレスポンスヘッダを除外する必要がありますAccess-Control-Expose-Headersヘッダーがある場合は、CORS API仕様で定義されたAPIに応答ヘッダーを公開します。

このパスには、Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、およびPragmaをリストする「単純なレスポンスヘッダー」のリンクが含まれています。それで、それらは合格します。 「Access-Control-Expose-Headersヘッダー」部分は、リモートサーバーが他のヘッダーも公開することを可能にします。詳細については、W3Cのドキュメントを参照してください。

ブラウザに読み込んだJavaScriptの一部を実行しているWebページで、スクリプトが別の起点にリクエストしていますが、これは通常は許可されていません。そんなに厄介なことをやる。したがって、ブラウザを実行してスクリプトを実行し、その代わりにHTTPリクエストを実行すると、ゲートキーパーとして機能します。

ブラウザは、「他の発信元」サーバからの応答を調べ、CORSに「参加していない」ようであれば、必要なヘッダが見つからないか、または不正な形式になっています。信頼できない私たちは、ローカルで実行されているスクリプトが、このように接触することを期待していないサーバーに接続しようとしているように見えるので、誠実に行動しているとは確信できません。ブラウザは、フィルタリングなしでスクリプト全体に応答を渡すだけで、そのリモートサーバから機密情報を漏らすべきではありません。つまり、基本的にはになります。には、情報開示の脆弱性が発生します。

これはデバッグを困難にする可能性がありますが、「ユーザー」はこのコンテキストの開発者であるためセキュリティに重要な優先順位が与えられます。

+5

誰かがこのような理由で説明した場合、つまり4xx応答の本文が意図的にフィルタリングされた理由など、リンクされた記事をすばやく見ても役立たなかった。 –

+1

これは本当にいいですか?スクリプトはエラーメッセージを表示しません。それはもちろんそれがCORSの設定だと結論づけることができます。それは何でしょうか?原点?ヘッダーフィールド?私は悪い人が知っていると思います。私たちの残りの部分だけがわかりません。 – Leo

+0

この似たような質問には、エラーメッセージが表示されない理由についての情報がいくつかあります。https://stackoverflow.com/questions/19325314/how-to-detect-cross-origin-cors-error-vs -other-types-of-errors-for-xmlhttpreq – contrebis

関連する問題