2012-05-30 19 views
8

ドメイン間でデータをフェッチするサーバー側プロキシを簡単に書くことができたため、クライアント側のAJAXがドメイン間で呼び出しを行うことを阻止するための初期の意図はありませんでした。私は推測を求めているわけではなく、単に開発者に軽度の不便さを与えるだけではなく、彼らが行っていると思ったことについて、言語デザイナー(またはそれらに近い人物)からのドキュメンテーションを探しています。AJAXクロスドメインセキュリティの背景には何がありますか?

TIA

+1

http://msdn.microsoft.com/en-us/library/cc709423(v=vs.85).aspx – user1096188

+1

http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest読書に値する本全体。 – jasssonpet

+0

@jasssonpet素晴らしいリンク、それをブックマークしました! –

答えて

6

ブラウザがリバースプロキシとして動作するのを防ぐにはです。あなたのオフィスのPCからhttp://www.evil.comを閲覧していて、そのオフィスに、ローカルネットワークからのみアクセス可能な機密情報のあるhttp://intranet.company.comがあるイントラネットが存在するとします。 クロスドメインポリシーが存在しない場合、www.evil.comはブラウザをリバースプロキシとしてhttp://intranet.company.comにajaxリクエストを行い、その情報を別のAjaxリクエストとともにwww.evil.comに送信することができます。

これは私が推測する制限の理由の1つです。

+0

はい、それは...)...私の答えよりもはっきりと分かりました。私は道を失いました。 – fguillen

+0

*はるかに遠くに見えるようです。あなたのイントラネットには、evil.comが電話をかける方法を知らなければならないAJAXレスポンダが必要です。それが本当に懸念されるのであれば、イントラネットでCGIを実行することはできません。 –

+0

@GrabrielJürgensは、ドメイン間ポリシー_がなければイントラネット内の任意のURI(CGIだけでなく、AJAXレスポンダが何であるかわからない)が侵害されていると述べています。攻撃者は、呼び出す特定のURIを知ることができます。または無差別な試行を強制することは重要ではありません。実際のセキュリティ上の問題です。 – fguillen

2

この制限のために最も重要な理由は、セキュリティ上の問題である:JSONリクエストメイクブラウザがサービスを提供し、別のドメインへの要求にクッキーやセキュリティ証明書を受け入れる必要がありますか?これは、クライアント側の環境に直接アクセスすることができないため、サーバー側のプロキシでは問題になりません。 a proposal for safe sanitized JSON-specific request methodsがありましたが、まだどこにも実装されていませんでした。

2

あなたがmyblog.comの著者で、facebook.comにXHRを作成している場合は、要求があなたのFacebook Cookieの認証情報を送信する必要がありますか?いいえ、それはあなたのブログからユーザーのプライベートなFacebookの情報を要求できるということです。

プロキシサービスを作成すると、プロキシはそのFacebookブックCookieにアクセスできません。

JSONPが問題ないのはなぜか疑問に思うかもしれません。理由はあなたが書かなかったスクリプトをロードしているからです。facebookのスクリプトがJSコードから情報を送ることを決めるのでなければ、あなたはそれにアクセスすることができません。

+0

私はXHRに慣れていないかもしれません...クッキーを取り出して調べるためにXHRに固有の能力はありますか?私はクッキーが別の仕組みだと思っていました.XHRは、HTTP要求のためのデータ転送メカニズム(特に排他的)でした。 –

+0

XHRはHTTP要求です。接続しているドメインのCookieを送信します.HTMLページやそのドメインからイメージをリクエストしたり、XHRを自分のページに作成したり、イメージやスクリプト、または別のサーバからのiframeさえもあります。 –

1

ダイレクトアクセスとプロキシは、1つの起源に完全に制限されたクッキーおよび他のセキュリティ関連の識別/検証情報である。

これでブラウザは機密データにアクセスできます。あなたのプロキシは、ユーザのログインデータを知らないので、プロキシはしません。

したがって、プロキシはパブリックデータにのみ適用されます。 CORSと同じです。

1

私はあなたが専門家の回答を求めている知っている、私は初心者だし、これはサーバ側プロキシが適切な最終的な解決策ではない理由に私の意見です:を構築

  • サーバー側プロキシは、まったくビルドしないほど簡単ではありません。
  • サードパーティ製JSウィジェットのようなものは必ずしもありません。あなたはあなたのウィジェットを統合するためのDNS登録を宣言するようあなたのすべての出版社に頼むつもりはありません。そして、副次的な問題で彼のページのdocument.domainを修正してください。
  • 書籍「Third Party Javascript」を読むと、ドメイン間の要求を行う前に中間のトンネルファイルをロードする必要があります。少なくともJSONPをもっと難解なジャグリングでゲームに入れます。
  • IE8は上記の本でもサポートされていません。「IE8は、どちらも共通ドメインネームスペースを選択しても、トップレベルドメインとそのサブドメインとの通信を妨げる非常に奇妙なバグを持っています」
  • 人々が他の回答で説明したようにいくつかのセキュリティ上の問題があります。さらに、の章を確認できます。4.3.2上記のサブドメインプロキシを使用したメッセージ交換
  • 私にとって

そして、最も重要:

  • これは、JSONPのソリューションのように、それは標準、信頼性の高い、安全で、清潔で快適なソリューションのための時間です。..ハックです。

あなたの質問を再読み込みした後、私はまだ答えなかったと思いますので、なぜこのAJAXセキュリティですか?、再び私が思うに、答えは次のとおりです。

はあなたが訪問するすべてのWebページがあなたのオフィスのイントラネットへ任意のコンピュータやサーバにデスクトップから呼び出しを作ることができるようにしたくないので

+0

、これは完全な赤いニシンです。イントラネットがcgi要求を取得して処理するように設定されている場合、そのページはそれらの利点を活用する可能性があります。これは単に実世界の関心事ではありません! –

関連する問題