この記事では、JS の同一オリジン戦略をより詳細に分析します。皆さんの参考に共有してください。詳細は以下の通りです。
コンセプト: 同一生成元ポリシーは、クライアント側スクリプト (特に Javascript) にとって重要なセキュリティ メトリックです。これは Netscape Navigator2.0 から初めて登場し、その目的はドキュメントまたはスクリプトが複数の異なるソースからロードされるのを防ぐことです。
ここでの同じオリジンとは、同じプロトコル、同じドメイン名、同じポートを指します。
エッセンス:
その本質は単純です。サイトから読み込まれた信頼できるコンテンツは安全でないとみなします。ブラウザーによって信頼されていないスクリプトがサンドボックスで実行される場合、悪意のある可能性のある他のサイトからのリソースではなく、同じサイトからのリソースへのアクセスのみを許可する必要があります。
同一生成元制限があるのはなぜですか?
例を挙げてみましょう。たとえば、ハッカー プログラムは IFrame を使用して、実際のユーザー名とパスワードを使用してログインすると、そのページのコンテンツを読み取ることができます。ユーザー名とパスワードを簡単に取得できるように、フォームに入力します。
Ajax アプリケーション:
このセキュリティ制限は、Ajax アプリケーションでは破られます。
通常の Javascript アプリケーションでは、Frame の href または IFrame の src を変更して、GET モードでのクロスドメイン送信を実現できますが、クロスドメイン Frame/IFrame のコンテンツにアクセスすることはできません。
Ajax は非同期対話に XMLHTTP を使用します。このオブジェクトはリモート サーバーと対話することもできます。さらに危険なのは、この対話プロセスがユーザーによって認識されることです。したがって、XMLHTTP は、JavaScript の本来のセキュリティ制限を実際に突破しました。
XMLHTTP のリフレッシュ不要の非同期対話機能を利用したいが、JavaScript のセキュリティ ポリシーをあからさまに破りたくない場合は、別の方法として、厳格な同一オリジン制限を XMLHTTP に追加します。このようなセキュリティ ポリシーは、アプレットのセキュリティ ポリシーと非常によく似ています。 IFrame の制限は、クロスドメイン HTMLDOM 内のデータにアクセスできないことですが、XMLHTTP は基本的にクロスドメイン リクエストの送信を制限します 。
ブラウザのサポート: IE は、このセキュリティ ポリシーに対して実際に 2 つのバックドアを開きます。1 つは、ローカル ファイルがアクセスされるコンテンツを自然に認識していることを前提としているため、ローカル ファイルは外部データにアクセスしません。警告。もう 1 つは、アクセスした Web サイトのスクリプトがクロスドメイン情報にアクセスしようとしている場合、実際にはダイアログ ボックスをポップアップ表示して注意を促すことです。詐欺的な Web サイトがこの方法を使用して偽のページを提供し、XMLHTTP を介して実際の銀行サーバーにリモートでログインできるようにする場合。 10 人のユーザーのうち 1 人だけが混乱して [OK] をクリックしました。彼らのアカウント盗難は成功しました! 考えてみてください、これはどれほど危険なことでしょう。
FireFox はこれを行いません。デフォルトでは、FireFox はクロスドメイン XMLHTTP リクエストをまったくサポートしておらず、ハッカーにそのような機会を与えません。
同一生成元戦略を避ける:
JSON および動的スクリプトタグ
src="http://yoursiteweb.com/findItinerary?username=sachiko&
予約番号=1234&output=json&callback=showItinerary" />
JavaScript コードが