Microsoft Edge では変更が無効になります document.domain

Warning

Web サイトが 経由 document.domainで同じ配信元ポリシーを緩和するに依存している場合は、アクションが必要です。 これが変更される理由の詳細については、引き続き「 代替のクロスオリジン通信 」を参照して、クロスオリジン通信を実現するための代替メカニズムについて学習してください。

はじめに

Document インターフェイスの "domain" プロパティは、 同じ配信元ポリシーで使用される現在のドキュメントの配信元のドメイン部分を取得または設定します。

Microsoft Edge は、この変更をChromiumから継承しました。 JavaScript を使用してプロパティを document.domain 変更しようとしても無視されるようになりました。 クロスオリジンを通信するには、代替アプローチ (チャネル メッセージング API など postMessage() ) を使用する必要があります。 この変更は Edge 119 以降にあります。

別の方法として、Web サイトがを介して document.domain 同じ配信元ポリシーの緩和に依存して正しく機能する場合、サイトはヘッダーを Origin-Agent-Cluster: ?0 送信する可能性があります。このヘッダーは、緩和を必要とする他のすべてのドキュメントから送信する必要があります。

document.domain は、1 つのドキュメントだけが設定する場合は効果がありません。

不変にする document.domain 理由

一部の Web サイトは、"同じサイトがクロスオリジン" ページ間の通信を許可するように設定 document.domain されています。 設定 document.domain すると、同じサイトドキュメントをより簡単に通信できます。 この変更 は同じ配信元ポリシーを緩和するため、親ページは同じサイトの iframe のドキュメントにアクセスし、DOM ツリーを走査できます。その逆も可能です。

重要

同じサイトがクロスオリジン サイトの 場合、eTLD+1 は同じですが、サブドメインは異なります。

上のページ https://parent.example.com が から https://video.example.comiframe ページを埋め込んだとします。 これらのページには、異なるサブドメインを持つ同じ eTLD+1 (example.com) があります。 両方のページ' document.domain が に 'example.com'設定されている場合、ブラウザーは 2 つのページを同じ配信元であるかのように扱います。

この手法は便利です。セキュリティ リスクが発生します。

セキュリティに関する懸念事項 document.domain

セキュリティに関する document.domain 懸念により、この問題について開発者に警告し、可能であれば使用しないように指示する仕様が変更されました。 他のブラウザー ベンダーとの現在の議論は、同じ方向に進みます。

次の例は、攻撃者が を悪用 document.domainする方法を示しています。

各顧客に一意のサブドメインを提供する共有ホスティング サービスについて考えてみましょう。 開発者が自分のページで設定 document.domain した場合、別のサブドメインから提供される攻撃者のページで同じ値を設定し、被害者ページのコンテンツを変更できます。

同様に、顧客ごとに異なるポートを使用してページを提供する共有ホスティング サービスを検討してください。 開発者が自分のページで設定 document.domain した場合、別のポートから提供される攻撃者のページで同じ値を設定し、被害者ページの内容を変更できます。 この攻撃は、配信元のポート番号コンポーネントを無視するため document.domain です。

設定 document.domainのセキュリティへの影響の詳細については、 MDN の Document.domain に関する記事を参照してください。

自分のサイトが影響を受けるかどうかを確認するにはどうすればよいですか?

Web サイトがこの変更の影響を受けている場合、Microsoft Edge は DevTools の [問題] パネルに警告を表示します。 次のスクリーンショットは、この警告の例を示しています。

document.domain が変更されたときの警告。

レポート エンドポイントを設定している場合は、非推奨レポートも送信されます。 既存のレポート コレクション サービスで Reporting API を使用する方法 、または独自のレポート ソリューションを構築する方法について説明します。

ヒント

LightHouse 非推奨の API 監査を使用してサイトを実行して、Microsoft Edge から削除されるようにスケジュールされているすべての API を見つけることができます。

代替のクロスオリジン通信

現在、Web サイトに置き換える document.domain オプションは 2 つあります。 ほとんどのユース ケースでは、クロスオリジン postMessage() または Channel Messaging API で を置き換えることができます document.domain

次の一覧は、クロスオリジン DOM 操作の代わりにdocument.domain開発者が使用postMessage()するために必要な手順を示しています。

  1. https://parent.example.com を介して postMessage() 、独自の DOM を変更するように求めるメッセージを含む https://video.example.com iframe に送信します。
  2. https://video.example.com は DOM を操作し、親にその成功を通知するために を使用 postMessage します。
  3. https://parent.example.com 成功を認めます。

の手順 1 https://parent.example.comの場合:


// Configure a handler to receive messages from the subframe.
iframe.addEventListener('message', (event) => { 

// Reject all messages except from https://video.example.com 
  if (event.origin !== 'https://video.example.com') return;
  
  // Filter success messages 
    if (event.data === 'succeeded') { 

    // DOM manipulation is succeeded 

  } 

}); 

// Send a message to the subframe at https://video.example.com

iframe.postMessage('Request DOM manipulation', 'https://video.example.com'); 

の手順 2 https://video.example.comの場合:


// Configure a handler to receive messages from the parent frame.
window.addEventListener('message', (event) => {
 
  // Reject all messages except ones from https://parent.example.com 
  
  if (event.origin !== 'https://parent.example.com') return;
  
  // Perform requested DOM manipulation on https://video.example.com.
  
  if (event.data === "showTheButton") {
     document.getElementById('btnContinue').style.visibility = 'visible';
     // Send a success message back to the parent.

     event.source.postMessage('succeeded', event.origin); 
  }
}); 

最後の手段としてヘッダーを送信するOrigin-Agent-Cluster: ?0

設定 document.domainを続行する強い理由がある場合は、ターゲット ドキュメントで応答ヘッダーを送信 Origin-Agent-Cluster: ?0 できます。

Origin-Agent-Cluster: ?0 

ヘッダーは Origin-Agent-Cluster 、ドキュメントを配信元キー付きエージェント クラスターで処理するかどうかをブラウザーに指示します。 の詳細 Origin-Agent-Clusterについては、「 Origin-Agent-Cluster ヘッダーを使用したパフォーマンス分離の要求」を参照してください。

このヘッダーを送信すると、ドキュメントは既定で変更不可になった後でも設定 document.domain を続行できます。

ブラウザーの互換性

次の組織では、ブラウザーの互換性のために非推奨 document.domain がサポートされています。

  • 配信元の仕様では、機能を削除する必要があることを示します。
  • Mozilla 標準の位置では、プロトタイプ作成document.domainの価値が既定で無効にすることを検討しています。
  • WebKit は、セッターの非推奨に関して中程度の肯定的であることを document.domain 示します。

その他のリソース

コンテンツ ライセンス

このページの一部の情報は、Chromium.org によって作成および共有されている著作物に基づいており、Creative Commons Attribution 4.0 International License に記載されている条項に従って使用されています。 元のページはこちらです。

クリエイティブ・コモンズ・ライセンス
この著作物は、Creative Commons Attribution 4.0 International License に従って使用許諾されています。