1. 7.3 生成元
      1. 7.3.1 同一生成元制限を緩和する
      2. 7.3.2 生成元の分離
    2. 7.4 サンドボックス
    3. 7.5 生成元をまたいだオープナーポリシー
      1. 7.5.1 The headers
      2. 7.5.2 生成元をまたいだオープナーポリシーによるブラウジングコンテキストグループスイッチ
      3. 7.5.3 Reporting
    4. 7.6 生成元をまたいだ埋め込みポリシー
      1. 7.6.1 ヘッダー
      2. 7.6.2 埋め込みポリシーチェック

7.3 生成元

生成元は、ウェブのセキュリティモデルの基本的な通貨である。生成元を共有するウェブプラットフォーム内の2つの当事者が互いに信頼し、同一の権限を有すると仮定される。異なる生成元をもつ当事者は、互いに潜在的に悪意があると見なされ、互いから程度を変化させるよう隔離される。

たとえば、bank.example.comでホストされるExample Bankのウェブサイトは、charity.example.orgでホストExample CharityのウェブサイトのDOMを検査しようとすると、"SecurityError" DOMException が発生する。


生成元は次のいずれかである:

不透明な生成元

内部値であり、シリアライズされていないために再作成することができない(生成元のシリアライズごとに"null"としてシリアライズされる)。意味のある操作は、透過性のテストのみである。

タプルの生成元

タプルは以下で構成される:

生成元は、たとえば複数のDocumentオブジェクト間で共有できる。さらに、生成元は一般に不変である。タプルの生成元ドメインのみ、およびdocument.domain APIを介してのみ変更できる。

生成元origin有効ドメインは、次のように計算される:

  1. origin不透明な生成元である場合、nullを返す。

  2. originドメインがnullでない場合、originドメインを返す。

  3. originホストを返す。

7.3.1 同一生成元制限を緩和する

Document/domain

Support in all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+Internet Explorer4+
Firefox Android4+Safari iOS1+Chrome Android18+WebView Android1+Samsung Internet1.0+Opera Android12.1+
document . domain [ = domain ]

セキュリティチェックのために使用される現在のドメインを返す。

サブドメインを削除する値に設定し、生成元ドメインを変更し、同じドメインの他のサブドメイン(同じことを行う場合)のページが互いにアクセスできるようにすることができる。これにより、ドメインの異なるホスト上のページが、互いのDOMに同期的にアクセスできるようになる。

サンドボックス化されたiframe不透明な生成元をもつDocumentブラウジングコンテキストのないDocument、および"document-domain"機能が無効になっている場合、セッターは"SecurityError"例外を投げる。crossOriginIsolatedまたはoriginIsolatedがtrueを返す場合、セッターは何もしない。

document.domainセッターの使用を避ける。これは、同一生成元ポリシーが提供するセキュリティ保護を損なうものである。これは共有ホスティングを使用している場合に特に顕著である。たとえば、信頼できないサードパーティが同じIPアドレスだが異なるポートで HTTP サーバーをホストできる場合、document.domainセッターを使用した後に生成元を比較するときにポートが無視されるため、通常は同じホスト上の2つの異なるサイトを保護する同一生成元の保護が失敗する。

これらのセキュリティ上の落とし穴があるため、この機能はウェブプラットフォームから削除されるプロセスにある。(これは何年もかかる長いプロセスである。)

代わりに、安全な方法で生成元間で通信するために、postMessage() またはMessageChannelオブジェクトを使用する。

7.3.2 生成元の分離

window . originIsolated

この節で説明されている方法で、このWindowが生成元から分離されている場合にtrueを返す。

セキュアなコンテキストで配信されるDocumentは、`Origin-Isolation` HTTP レスポンスヘッダーを使用することで、 生成元の分離をオプトインすることができる。このヘッダーは構造化されたヘッダーであり、その値は真偽値でなければらない。[STRUCTURED-FIELDS]

構造化されたヘッダーの真偽値ではない値(すなわち、`?1`)は無視される。

このヘッダーを使用した結果は、document.domainを使用して同一生成元の制限を緩和しようとしても何も実行されない代わりに、WebAssembly.Moduleオブジェクトを生成元をまたいだDocumentに送信することができなくなることである(たとえ同じサイトであっても)。水面下で、この分離により、ユーザーエージェントは、プロセスやスレッドなどのエージェントクラスターに対応する実装固有のリソースをより効率的に割り当てることが可能になる。

ブラウジングコンテキストグループ内では、`Origin-Isolation`ヘッダーは、たとえ一方がヘッダーを送信し、他方が送信しない場合でも、同一生成元のDocumentオブジェクトが異なるエージェントクラスターで終わる原因にはならないことに注意する。

つまり、originIsolatedゲッターは、同じブラウジングコンテキストグループ内の以前にロードされた同一生成元のページでヘッダーが省略されていた場合、たとえヘッダーが設定されていても、falseを返すことができるということである。同様に、ヘッダーが設定されていなくてもtrueを返すことができる。

不透明な生成元をもつDocumentは、無条件に生成元が分離されているとみなすことができる。その場合、ヘッダーは効果がない。

同様に、生成元をまたいだ分離エージェントクラスター内のDocumentは自動的に生成元分離がされる。生成元をまたいだ分離を達成するために使用される`Cross-Origin-Opener-Policy`および`Cross-Origin-Embedder-Policy`ヘッダーは、同じアドレス空間内のすべてのものがそこに存在することを保証することを目的としているため、`Origin-Isolation`ヘッダーは、リソースの割り当てに関する実装への追加のヒントとして有用であるかもしれない。しかし、それを追加しても、著者のコードに追加の目に見える影響はない。

7.4 サンドボックス

サンドボックスフラグセットは以下のフラグの0個以上の集合であり、これは潜在的に信頼されないリソースが持つ能力を制限するために使用される:

サンドボックス化されたナビゲーションブラウジングコンテキストフラグ

このフラグは、コンテンツが、サンドボックス化されたブラウジングコンテキスト自体(またはその中にさらにネストされたブラウジングコンテキスト)、補助ブラウジングコンテキスト(次に定義されるサンドボックス化された補助ナビゲーションブラウジングコンテキストフラグによって保護されている)、およびトップレベルブラウジングコンテキストサンドボックス化されたユーザー起動ブラウジングコンテキストフラグなしのトップレベルナビゲーション、および以下に定義されるサンドボックス化されたユーザー起動ブラウジングコンテキストフラグありトップレベルナビゲーションによって保護されている)以外のブラウジングコンテキストをナビゲートすることを防止するものである。

サンドボックス化された補助ナビゲーションブラウジングコンテキストフラグが設定されない場合、それにもかかわらず一定の場合における制限はポップアップ(新しいトップレベルブラウジングコンテキスト)を開くことができる。これらのブラウジングコンテキストは常に、1つの許可されたサンドボックス化されたナビゲーターを持ち、実際に移動するために作成したブラウジングコンテキストを許可する、ブラウジングコンテキストが作成されるときに設定を持つ。(そうでなければ、サンドボックス化されたナビゲーションブラウジングコンテキストフラグは、それらが開かれた場合であってもナビゲートされていくのを防ぐだろう。)

サンドボックス化された補助ナビゲーションブラウジングコンテキストフラグ

このフラグは、コンテンツが新しい補助ブラウジングコンテキストを作成するのを防ぐ。 たとえば、target属性やwindow.open()メソッドを使用する。

ユーザーによるアクティブ化なしでサンドボックス化されたトップレベルナビゲーションブラウジングコンテキストフラグ

このフラグは、それらのトップレベルブラウジングコンテキストのナビゲートからコンテンツを防ぎ、かつそれらのトップレベルブラウジングコンテキストの遮断からコンテンツを防ぐ。サンドボックス化されたブラウジングコンテキストのアクティブウィンドウ一時的なアクティブ化を持たない場合にのみ考慮される。

ユーザーによるアクティブ化なしでサンドボックス化されたトップレベルナビゲーションブラウジングコンテキストフラグが設定されていない場合、コンテンツはそのトップレベルブラウジングコンテキストをナビゲートすることができるが、他のブラウジングコンテキストは、サンドボックス化されたナビゲーションブラウジングコンテキストフラグ、およびサンドボックス化された補助ナビゲーションブラウジングコンテキストフラグによって保護されたままである。

ユーザーによるアクティブ化でサンドボックス化されたトップレベルナビゲーションブラウジングコンテキストフラグ

このフラグは、それらのトップレベルブラウジングコンテキストのナビゲートからコンテンツを防ぎ、かつそれらのトップレベルブラウジングコンテキストの遮断からコンテンツを防ぐ。サンドボックス化されたブラウジングコンテキストのアクティブウィンドウ一時的なアクティブ化を持つ場合にのみ考慮される。

ユーザーによるアクティブ化なしでサンドボックス化されたブラウジングコンテキストフラグと同様に、このフラグはトップレベルブラウジングコンテキストにのみ影響する。 設定されていない場合、他のブラウジングコンテキストが他のフラグによって保護されている可能性がある。

サンドボックス化されたプラグインブラウジングコンテキストフラグ

このフラグは、embed要素object要素を使用するか、またはネストされたブラウジングコンテキストナビゲーションを介するかに関係なく、それらのプラグイン保護されない限り、コンテンツがプラグインをインスタンス化できないようにする。

サンドボックス化された生成元ブラウジングコンテキストフラグ

このフラグは、一意な生成元にコンテンツを強制する。したがって、同一生成元から他のコンテンツにアクセスすることを防止する。

このフラグはまた、document.cookie IDL属性からの読み取りまたは書き込みをするスクリプトを防止しlocalStorageへのアクセスをブロックする。

サンドボックス化されたフォームブラウジングコンテキストフラグ

このフラグはフォーム送信をブロックする

サンドボックス化されたポインターロックブラウジングコンテキストフラグ

このフラグはPointer Lock APIを無効にする。[POINTERLOCK]

サンドボックス化されたスクリプトブラウジングコンテキストフラグ

このフラグは、スクリプトの実行をブロックする

サンドボックス化された自動機能ブラウジングコンテキストフラグ

このフラグは、自動ビデオ再生自動フォームコントロールフォーカスなどの、自動的に切り替える機能をブロックする。

サンドボックス化されたdocument.domainブラウジングコンテキストフラグ

このフラグは、コンテンツがdocument.domainセッターを使用することから防ぐ。

サンドボックスが補助ブラウジングコンテキストに伝播するフラグ

このフラグは、コンテンツが作成する補助ブラウジングコンテキストがコンテンツのアクティブなサンドボックスフラグセットを継承するのを保証することで、そのコンテンツがサンドボックスをエスケープするのを防ぐ。

サンドボックス化されたモーダルフラグ

このフラグは、コンテンツが以下の機能のいずれかを使用してモーダルダイアログを生成するのを防ぐ:

サンドボックス化された方向ロックブラウジングコンテキストフラグ

このフラグは、画面の向きをロックする機能を無効にする。[SCREENORIENTATION]

サンドボックス化されたプレゼンテーションブラウジングコンテキストフラグ

このフラグはPresentation APIを無効にする。 [PRESENTATION]

サンドボックス化されたダウンロードブラウジングコンテキストフラグ

このフラグは、ハイパーリンクのダウンロードまたはダウンロードとして処理されるナビゲーションのいずれを介して、コンテンツがダウンロードを開始またはインスタンス化するのを防ぐ。

When the user agent is to parse a sandboxing directive, given a string input, a sandboxing flag set output, it must run the following steps:

  1. Split input on ASCII whitespace, to obtain tokens.

  2. outputを空にする。

  3. outputに次のフラグを追加する:


すべてのトップレベルブラウジングコンテキストは、ポップアップサンドボックス化 フラグセットを持ち、これはサンドボックス化フラグセットである。ブラウジングコンテキストが作成される場合、そのポップアップサンド化フラグセットは空でなければならない。これは、ブラウジングコンテキストを選択するための規則と、ナビゲーション応答に使用するブラウジングコンテキストを取得するためのアルゴリズムで構成されている。

すべてのiframe要素は、iframeサンドボックス化フラグセットを持ち、これはサンドボックス化フラグセットである。iframeサンドボックス化フラグセットのどのフラグが特定の時間にセットされるかは、iframe要素のsandbox 属性によって決定される。

すべてのDocumentは、アクティブなサンドボックス化フラグセットを持ち、これはサンドボックス化フラグセットである。Documentが作成される場合、そのアクティブなサンドボックス化フラグセットは空でなければならない。それは、ナビゲーションアルゴリズムによって追加される。

ナビゲーションアルゴリズムによって得られるすべてのリソースは、強制サンドボックス化フラグセットを持ち、これはサンドボックス化フラグセットである。デフォルトでリソースは、その強制サンドボックス化フラグセットで設定されるフラグを持たないが、他の仕様は、特定のフラグがセットされていることを定義できる。

具体的には、強制サンドボックス化フラグセットContent Security Policyによって使用される。[CSP]


nullまたは要素embedderを与えられた、ブラウジングコンテキストbrowsing context作成サンドボックス化フラグを決定するためには、次のサンドボックス化フラグセットに存在するフラグのを返す。

作成後、ブラウジングコンテキストbrowsing contextサンドボックス化フラグは、browsing contextおよびbrowsing contextコンテナーに与えられた作成サンドボックス化フラグを決定した結果となる。

7.5 生成元をまたいだオープナーポリシー

A cross-origin opener policy value allows a document which is navigated to in a top-level browsing context to force the creation of a new top-level browsing context, and a corresponding group. 可能な値は次のとおり:

"unsafe-none"

これは(現在の)デフォルトであり、文書が別の生成元をまたいだオープナーポリシーを指定しない限り、文書がその前の文書と同じトップレベルブラウジングコンテキストを占有することを意味する。

"same-origin-allow-popups"

これは、前の文書が同じ生成元をまたいだオープナーポリシーを指定しており、それらが同一生成元でない限り、文書の新しいトップレベルブラウジングコンテキストを強制的に作成する。

"same-origin"

これは、"same-origin-allow-popups"と同じように動作するが、作成される補助ブラウジングコンテキストは、同じ生成元をまたいだオープナーポリシーを持つ同一生成元の文書を含める必要があることが追加される。さもなければ、オープナーに非公開で表示される。

"same-origin-plus-COEP"

これは"same-origin"と同じように動作するが、(新しい)トップレベルブラウジングコンテキストグループ生成元をまたいだ分離をtrueに設定することが追加される。

"same-origin-plus-COEP" は、`Cross-Origin-Opener-Policy`ヘッダーで直接設定することはできないが、`Cross-Origin-Opener-Policy: same-origin` と`Cross-Origin-Embedder-Policy: require-corp`の両方を一緒に設定した組み合わせから生じる。

A cross-origin opener policy consists of:

To match cross-origin opener policy values, given a cross-origin opener policy value A, an origin originA, a cross-origin opener policy value B, and an origin originB:

  1. Aが"unsafe-none"かつBが"unsafe-none"である場合、trueを返す。

  2. Aが"unsafe-none"またはBが"unsafe-none"である場合、falseを返す。

  3. ABであり、かつoriginAが"originBをもつ同一生成元である場合、trueを返す。

  4. falseを返す。

7.5.1 The headers

A Document's cross-origin opener policy is derived from the `Cross-Origin-Opener-Policy` and the `Cross-Origin-Opener-Policy-Report-Only` HTTP response headers. These headers are structured headers whose value must be a token. [STRUCTURED-FIELDS]

The valid token values are the opener policy values. トークンはまた、付属のパラメーターを持ってもよい。これらのうち、"report-to"パラメーターは、適切な報告エンドポイントを識別する妥当なURL文字列を持つことができる。[REPORTING]

以下に説明する処理モデルに従って、ユーザーエージェントは、このヘッダーに不正値が含まれている場合、そのヘッダーを無視する。同様に、値がトークンとして解析できない場合、ユーザーエージェントはこのヘッダーを無視する。


To obtain a cross-origin opener policy given a response response and an environment reservedEnvironment:

  1. Let policy be a new cross-origin opener policy.

  2. If reservedEnvironment is a non-secure context, then return policy.

  3. Let value be the result of getting a structured field value given `Cross-Origin-Opener-Policy` and "item" from response's header list.

  4. If parsedItem is not null, then:

    1. If parsedItem[0] is "same-origin", then:

      1. Let coep be the result of obtaining a cross-origin embedder policy from response.

      2. If coep's value is "require-corp", then set policy's value to "same-origin-plus-COEP".

      3. Otherwise, set policy's value to "same-origin".

    2. If parsedItem[0] is "same-origin-allow-popups", then set policy's value to "same-origin-allow-popups".

    3. If parsedItem[1]["report-to"] exists and it is a string, then set policy's reporting endpoint to parsedItem[1]["report-to"].

  5. Set parsedItem to the result of getting a structured field value given `Cross-Origin-Opener-Policy-Report-Only` and "item" from response's header list.

  6. If parsedItem is not null, then:

    1. If parsedItem[0] is "same-origin", then:

      1. Let coep be the result of obtaining a cross-origin embedder policy from response.

      2. If coep's value is "require-corp" or coep's report-only value is "require-corp", then set policy's report-only value to "same-origin-plus-COEP".

        Report only COOP also considers report-only COEP to assign the special "same-origin-plus-COEP" value. This allows developers more freedom in the order of deployment of COOP and COEP.

      3. Otherwise, set policy's report-only value to "same-origin".

    2. If parsedItem[0] is "same-origin-allow-popups", then set policy's report-only value to "same-origin-allow-popups".

    3. If parsedItem[1]["report-to"] exists and it is a string, then set policy's report-only reporting endpoint to parsedItem[1]["report-to"].

  7. Return policy.

7.5.2 Browsing context group switches due to cross-origin opener policy

To check if COOP values require a browsing context group switch, given a boolean isInitialAboutBlank, two origins responseOrigin, activeDocumentNavigationOrigin, and two cross-origin opener policy values responseCOOPValue and activeDocumentCOOPValue:

  1. If the result of matching activeDocumentCOOPValue, activeDocumentNavigationOrigin, responseCOOPValue, and responseOrigin is true, return false.

  2. If all of the following are true:

    then return false.

  3. Return true.

To check if enforcing report-only COOP would require a browsing context group switch, given a boolean isInitialAboutBlank, two origins responseOrigin, activeDocumentNavigationOrigin, and two cross-origin opener policies responseCOOP and activeDocumentCOOP:

  1. If the result of checking if COOP values require a browsing context group switch given isInitialAboutBlank, sandboxFlags, responseOrigin, activeDocumentNavigationOrigin, responseCOOP's report-only value and activeDocumentCOOPReportOnly's report-only value is false, then return false.

    Matching report-only policies allows a website to specify the same report-only cross-origin opener policy on all its pages and not receive violation reports for navigations between these pages.

  2. If the result of checking if COOP values require a browsing context group switch given isInitialAboutBlank, sandboxFlags, responseOrigin, activeDocumentNavigationOrigin, responseCOOP's value and activeDocumentCOOPReportOnly's report-only value is true, then return true.

  3. If the result of checking if COOP values require a browsing context group switch given isInitialAboutBlank, sandboxFlags, responseOrigin, activeDocumentNavigationOrigin, responseCOOP's report-only value and activeDocumentCOOPReportOnly's value is true, then return true.

  4. falseを返す。

A cross-origin opener policy enforcement result is a struct with the following items:

To enforce a response's cross-origin opener policy, given a browsing context browsingContext, a URL responseURL, an origin responseOrigin, a cross-origin opener policy responseCOOP, a cross-origin opener policy enforcement result currentCOOPEnforcementResult, and a referrer referrer:

  1. Let newCOOPEnforcementResult be a new cross-origin opener policy enforcement result whose needs a browsing context group switch is currentCOOPEnforcementResult's needs a browsing context group switch, would need a browsing context group switch due to report-only is currentCOOPEnforcementResult's would need a browsing context group switch due to report-only, url is responseURL, origin is responseOrigin, coop is responseCOOP, and current context is navigation source is true.

  2. Let isInitialAboutBlank be false.

  3. If browsingContext's only entry in its session history is the about:blank Document that was added when browsingContext was created, then set isInitialAboutBlank to true.

  4. If isInitialAboutBlank is true and browsingContext's initial URL is null, set browsingContext's initial URL to responseURL.

  5. If the result of checking if COOP values require a browsing context group switch given isInitialAboutBlank, currentCOOPEnforcementResult's cross-origin opener policy's value, currentCOOPEnforcementResult's origin, responseCOOP's value, and responseOrigin is true, then:

    1. Set newCOOPEnforcementResult's needs a browsing context group switch to true.

    2. If browsingContext's group's browsing context set's size is greater than 1, then:

      1. Queue a violation report for browsing context group switch when navigating to a COOP response with responseCOOP, "enforce", responseURL, currentCOOPEnforcementResult's url, currentCOOPEnforcementResult's origin, responseOrigin, and referrer.

      2. Queue a violation report for browsing context group switch when navigating away from a COOP response with activeDocumentCOOP, "enforce", currentCOOPEnforcementResult's url, responseURL, currentCOOPEnforcementResult's origin, responseOrigin, and currentCOOPEnforcementResult's current context is navigation source.

  6. If the result of checking if enforcing report-only COOP would require a browsing context group switch given isInitialAboutBlank, responseOrigin, currentCOOPEnforcementResult's origin, responseCOOP, and currentCOOPEnforcementResult's cross-origin opener policy, is true, then:

    1. Set result's would need a browsing context group switch due to report-only to true.

    2. If browsingContext's group's browsing context set's size is greater than 1, then:

      1. Queue a violation report for browsing context group switch when navigating to a COOP response with responseCOOP, "reporting", responseURL, currentCOOPEnforcementResult's url, currentCOOPEnforcementResult's origin, responseOrigin,and referrer.

      2. Queue a violation report for browsing context group switch when navigating away from a COOP response with activeDocumentCOOP, "reporting", currentCOOPEnforcementResult's url, responseURL, currentCOOPEnforcementResult's origin, responseOrigin, and currentCOOPEnforcementResult's current context is navigation source.

  7. Return newCOOPEnforcementResult.

To obtain a browsing context to use for a navigation response, given a browsing contexts browsingContext, a sandboxing flag set sandboxFlags, a cross-origin opener policy navigationCOOP, and a cross-origin opener policy enforcement result coopEnforcementResult:

  1. Assert: browsingContext is a top-level browsing context.

  2. If coopEnforcementResult's needs a browsing context group switch is false, then:

    1. If coopEnforcementResult's would need a browsing context group switch due to report-only is true, set browsing context's virtual browsing context group ID to a new unique identifier.

    2. Return browsingContext.

  3. Let newBrowsingContext be the result of creating a new top-level browsing context.

  4. If navigationCOOP's value is "same-origin-plus-COEP", then set newBrowsingContext's group's cross-origin isolated to true.

  5. If sandboxFlags is not empty, then:

    1. Assert navigationCOOP's value is "unsafe-none".

    2. Assert: newBrowsingContext's popup sandboxing flag set is empty.

    3. Set newBrowsingContext's popup sandboxing flag set to a clone of sandboxFlags.

  6. Discard browsingContext.

    This has no effect on browsingContext's group, unless browsingContext was its sole top-level browsing context. In that case, the user agent might delete the browsing context group which no longer contains any browsing contexts.

  7. Return newBrowsingContext.

The impact of swapping browsing context groups following a navigation is not fully defined. It is currently under discussion in issue #5350.

7.5.3 Reporting

An accessor-accessed relationship is an enum that describes the relationship between two browsing contexts between which an access happened. It can take the following values:

accessor is opener

The accessor browsing context or one of its ancestors is the opener browsing context of the accessed browsing context's top-level browsing context.

accessor is openee

The accessed browsing context or one of its ancestors is the opener browsing context of the accessor browsing context's top-level browsing context.

none

There is no opener relationship between the accessor browsing context, the accessor browsing context, or any of their ancestors.

To check if an access between two browsing contexts should be reported, given two browsing contexts accessor and accessed, a JavaScript property name P, and an environment settings object environment:

  1. If P is not a cross-origin accessible window property name, then return.

  2. If accessor's active document's origin or any of its ancestors' active document's origins are not same origin with ancestor's top-level browsing context's active document's origin, or if accessed's active document's origin or any of its ancestors' active document's origins are not same origin with accessed's top-level browsing context's active document's origin, then return.

    This avoids leaking information about cross-origin iframes to a top level frame with cross-origin opener policy reporting

  3. If accessor's top-level browsing context's virtual browsing context group ID is accessed's top-level browsing context's virtual browsing context group ID, then return.

  4. Let accessorAccessedRelationship be a new accessor-accessed relationship with value none.

  5. If accessed's top-level browsing context's opener browsing context is accessor or an ancestor of accessor, then set accessorAccessedRelationship to accessor is opener.

  6. If accessor's top-level browsing context's opener browsing context is accessed or an ancestor of accessed, then set accessorAccessedRelationship to accessor is openee.

  7. Queue violation reports for accesses, given accessorAccessedRelationship, accessor's top-level browsing context's active document's cross-origin opener policy, accessed's top-level browsing context's active document's cross-origin opener policy, accessor's active document's URL, accessed's active document's URL, accessor's top-level browsing context's initial URL, accessed's top-level browsing context's initial URL, accessor's active document's origin, accessed's active document's origin, accessor's top-level browsing context's opener origin at creation, accessed's top-level browsing context's opener origin at creation, accessor's top-level browsing context's active document's referrer, accessed's top-level browsing context's active document's referrer, P, and environment.

To sanitize a URL to send in a report given a URL url:

  1. Let sanitizedURL be a copy of url.

  2. Set the username given sanitizedURL and the empty string.

  3. Set the password given sanitizedURL and the empty string.

  4. Return the serialization of sanitizedURL with the exclude fragment flag set.

To queue a violation report for browsing context group switch when navigating to a COOP response given a cross-origin opener policy coop, a string disposition, a URL coopURL, a URL previousResponseURL, two origins coopOrigin and previousResponseOrigin, and a referrer referrer:

  1. If coop's reporting endpoint is null, return.

  2. Let coopValue be coop's value.

  3. If disposition is "reporting", then set coopValue to coop's report-only value.

  4. Let serializedReferrer be an empty string

  5. If referrer is a URL, set serializedReferrer to the serialization of referrer.

  6. Let body be a new object containing the following properties:

    keyvalue
    dispositiondisposition
    effectivePolicycoopValue
    previousResponseURLIf coopOrigin and previousResponseOrigin are same origin this is the sanitization of previousResponseURL, null otherwise.
    referrerserializedReferrer
    type"navigation-to-response"
  7. Queue body as "coop" for coop's reporting endpoint with coopURL.

To queue a violation report for browsing context group switch when navigating away from a COOP response given a cross-origin opener policy coop, a string disposition, a URL coopURL, a URL nextResponseURL, two origins coopOrigin and nextResponseOrigin, and a boolean isCOOPResponseNavigationSource:

  1. If coop's reporting endpoint is null, return.

  2. Let coopValue be coop's value.

  3. If disposition is "reporting", then set coopValue to coop's report-only value.

  4. Let body be a new object containing the following properties:

    keyvalue
    dispositiondisposition
    effectivePolicycoopValue
    nextResponseURLIf coopOrigin and nextResponseOrigin are same origin or isCOOPResponseNavigationSource is true, this is the sanitization of previousResponseURL, null otherwise.
    type"navigation-to-response"
  5. Queue body as "coop" for coop's reporting endpoint with coopURL.

To queue violation reports for accesses, given an accessor-accessed relationship accessorAccessedRelationship, two cross-origin opener policies accessorCOOP and accessedCOOP, four URLs accessorURL, accessedURL, accessorInitialURL, accessedInitialURL, four origins accessorOrigin, accessedOrigin, accessorCreatorOrigin and accessedCreatorOrigin, two referrers accessorReferrer and accessedReferrer, a string propertyName, and an environment settings object environment:

  1. If coop's reporting endpoint is null, return.

  2. Let coopValue be coop's value.

  3. If disposition is "reporting", then set coopValue to coop's report-only value.

  4. If accessorAccessedRelationship is accessor is opener:

    1. Queue a violation report for access to an opened window, given accessorCOOP, accessorURL, accessedURL, accessedInitialURL, accessorOrigin, accessedOrigin, accessedCreatorOrigin, propertyName, and environment.

    2. Queue a violation report for access from the opener, given accessedCOOP, accessedURL, accessorURL, accessedOrigin, accessorOrigin, propertyName, and accessedReferrer.

  5. Otherwise, if accessorAccessedRelationship is accessor is openee:

    1. Queue a violation report for access to the opener, given accessorCOOP, accessorURL, accessedURL, accessorOrigin, accessedOrigin, propertyName, accessorReferrer, and environment.

    2. Queue a violation report for access from an opened window, given accessedCOOP, accessedURL, accessorURL, accessorInitialURL, accessedOrigin, accessorOrigin, accessorCreatorOrigin, and propertyName.

  6. Otherwise:

    1. Queue a violation report for access to another window, given accessorCOOP, accessorURL, accessedURL, accessorOrigin, accessedOrigin, propertyName, and environment

    2. Queue a violation report for access from another window, given accessedCOOP, accessedURL, accessorURL, accessedOrigin, accessorOrigin, and propertyName.

To queue a violation report for access to the opener, given a cross-origin opener policy coop, two URLs coopURL and openerURL, two origins coopOrigin and openerOrigin, a string propertyName, a referrer referrer, and an environment settings object environment:

  1. Let sourceFile, lineNumber and columnNumber be the relevant script URL and problematic position which triggered this report.

  2. Let serializedReferrer be an empty string

  3. If referrer is a URL, set serializedReferrer to the serialization of referrer.

  4. Let body be a new object containing the following properties:

    keyvalue
    disposition"reporting"
    effectivePolicycoop's report-only value
    propertypropertyName
    openerURLIf coopOrigin and openerOrigin are same origin, this is the sanitization of openerURL, null otherwise.
    referrerserializedReferrer
    sourceFilesourceFile
    lineNumberlineNumber
    columnNumbercolumnNumber
    type"access-to-opener"
  5. Queue body as "coop" for coop's reporting endpoint with coopURL and environment.

To queue a violation report for access to an opened window, given a cross-origin opener policy coop, three URLs coopURL, openedWindowURL and initialWindowURL, three origins coopOrigin, openedWindowOrigin, and openerInitialOrigin,a string propertyName, and an environment settings object environment:

  1. Let sourceFile, lineNumber and columnNumber be the relevant script URL and problematic position which triggered this report.

  2. Let body be a new object containing the following properties:

    keyvalue
    disposition"reporting"
    effectivePolicycoop's report-only value
    propertypropertyName
    openedWindowURLIf coopOrigin and openedWindowOrigin are same origin, this is the sanitization of openedWindowURL, null otherwise.
    openedWindowInitialURLIf coopOrigin and openerInitialOrigin are same origin, this is the sanitization of initialWindowURL, null otherwise.
    sourceFilesourceFile
    lineNumberlineNumber
    columnNumbercolumnNumber
    type"access-to-opener"
  3. Queue body as "coop" for coop's reporting endpoint with coopURL and environment.

To queue a violation report for access to another window, given a cross-origin opener policy coop, two URLs coopURL and otherURL, two origins coopOrigin and otherOrigin, a string propertyName, and an environment settings object environment:

  1. Let sourceFile, lineNumber and columnNumber be the relevant script URL and problematic position which triggered this report.

  2. Let body be a new object containing the following properties:

    keyvalue
    disposition"reporting"
    effectivePolicycoop's report-only value
    propertypropertyName
    otherURLIf coopOrigin and otherOrigin are same origin, this is the sanitization of otherURL, null otherwise.
    sourceFilesourceFile
    lineNumberlineNumber
    columnNumbercolumnNumber
    type"access-to-opener"
  3. Queue body as "coop" for coop's reporting endpoint with coopURL and environment.

To queue a violation report for access from the opener, given a cross-origin opener policy coop, two URLs coopURL and openerURL, two origins coopOrigin and openerOrigin, a string propertyName, and a referrer referrer:

  1. If coop's reporting endpoint is null, return.

  2. Let serializedReferrer be an empty string

  3. If referrer is a URL, set serializedReferrer to the serialization of referrer.

  4. Let body be a new object containing the following properties:

    keyvalue
    disposition"reporting"
    effectivePolicycoop's report-only value
    propertypropertyName
    openerURLIf coopOrigin and openerOrigin are same origin, this is the sanitization of openerURL, null otherwise.
    referrerserializedReferrer
    type"access-to-opener"
  5. Queue body as "coop" for coop's reporting endpoint with coopURL.

To queue a violation report for access from an opened window, given a cross-origin opener policy coop, three URLs coopURL, openedWindowURL and initialWindowURL, three origins coopOrigin, openedWindowOrigin, and openerInitialOrigin, and a string propertyName:

  1. If coop's reporting endpoint is null, return.

  2. Let body be a new object containing the following properties:

    keyvalue
    disposition"reporting"
    effectivePolicycoopValue
    propertycoop's report-only value
    openedWindowURLIf coopOrigin and openedWindowOrigin are same origin, this is the sanitization of openedWindowURL, null otherwise.
    openedWindowInitialURLIf coopOrigin and openerInitialOrigin are same origin, this is the sanitization of initialWindowURL, null otherwise.
    type"access-to-opener"
  3. Queue body as "coop" for coop's reporting endpoint with coopURL.

To queue a violation report for access from another window, given a cross-origin opener policy coop, two URLs coopURL and otherURL, two origins coopOrigin and otherOrigin, and a string propertyName:

  1. If coop's reporting endpoint is null, return.

  2. Let body be a new object containing the following properties:

    keyvalue
    disposition"reporting"
    effectivePolicycoop's report-only value
    propertypropertyName
    otherURLIf coopOrigin and otherOrigin are same origin, this is the sanitization of otherURL, null otherwise.
    typeaccess-to-opener
  3. Queue body as "coop" for coop's reporting endpoint with coopURL.

7.6 生成元をまたいだ埋め込みポリシー

埋め込みポリシー値は、リソース所有者から明示的に許可されていない生成元をまたいだリソースの取得を制御する。そのような値は2つある:

"unsafe-none"

これはデフォルトの値である。この値を使用するとき、CORSプロトコルまたは`Cross-Origin-Resource-Policy`ヘッダーを通して明示的な許可を与えることなしに生成元をまたいだリソースをフェッチすることができる。

"require-corp"

この値を使用するとき、生成元をまたいだリソースをフェッチするには、CORSプロトコルまたは`Cross-Origin-Resource-Policy`ヘッダーを通してサーバーの明示的な許可が必要となる。

埋め込みポリシーは次で構成される:

"coep"報告タイプは、値が"coep"となる報告タイプである。これはReportingObserverから可視である。

7.6.1 ヘッダー

`Cross-Origin-Embedder-Policy`および`Cross-Origin-Embedder-Policy-Report-Only` HTTP レスポンスヘッダーフィールドは、サーバーが環境設定オブジェクト埋め込みポリシーを宣言することを可能にする。このヘッダーは構造化されたヘッダーであり、その値はトークンでなければならない。[STRUCTURED-FIELDS]

妥当なトークンの値は、埋め込みポリシー値である。トークンはまた、付属のパラメーターを持ってもよい。これらのうち、"report-to"パラメーターは、適切な報告エンドポイントを識別する妥当なURL文字列を持つことができる。[REPORTING]

処理モデルは、トークンとして解析できないヘッダーの存在下ではオープンに失敗する(デフォルトで"unsafe-none")。これには、与えられた応答に存在する`Cross-Origin-Embedder-Policy`ヘッダーの複数のインスタンスを組み合わせて作成された不注意なリストが含まれる。

`Cross-Origin-Embedder-Policy`最終埋め込みポリシー値
No header delivered"unsafe-none"
`require-corp`"require-corp"
`unknown-value`"unsafe-none"
`require-corp, unknown-value`"unsafe-none"
`unknown-value, unknown-value`"unsafe-none"
`unknown-value, require-corp`"unsafe-none"
`require-corp, require-corp`"unsafe-none"

(同じことが`Cross-Origin-Embedder-Policy-Report-Only`にも適用される。)


To obtain an embedder policy from a response response:

  1. Let policy be a new embedder policy.

  2. Let parsedItem be the result of getting a structured field value with `Cross-Origin-Embedder-Policy` and "item" from response's header list.

  3. If parsedItem is non-null and parsedItem[0] is "require-corp":

    1. Set policy's value to "require-corp".

    2. If parsedItem[1]["report-to"] exists, then set policy's endpoint to parsedItem[1]["report-to"].

  4. Set parsedItem to the result of getting a structured field value with `Cross-Origin-Embedder-Policy-Report-Only` and "item" from response's header list.

  5. If parsedItem is non-null and parsedItem[0] is "require-corp":

    1. Set policy's report-only value to "require-corp".

    2. If parsedItem[1]["report-to"] exists, then set policy's report-only reporting endpoint to parsedItem[1]["report-to"].

  6. Return policy.

7.6.2 Embedder policy checks

To check a navigation response's adherence to its embedder policy given a response response and a browsing context target:

  1. If target is not a child browsing context, then return true.

  2. Let responsePolicy be the result of obtaining an embedder policy from response.

  3. Let parentPolicy be target's container document's embedder policy.

  4. If parentPolicy's report-only value is "require-corp" and responsePolicy's value is "unsafe-none", then queue a cross-origin embedder policy inheritance violation with response, "navigation", parentPolicy's report only reporting endpoint, "reporting", and target's container document's relevant settings object.

  5. If parentPolicy's value is "unsafe-none" or responsePolicy's value is "require-corp", then return true.

  6. Queue a cross-origin embedder policy inheritance violation with response, "navigation", parentPolicy's reporting endpoint, "enforce", and target's container document's relevant settings object.

  7. falseを返す。

To check a global object's embedder policy given a WorkerGlobalScope workerGlobalScope, an environment settings object owner, and a response response:

  1. If workerGlobalScope is not a DedicatedWorkerGlobalScope object, then return true.

  2. Let policy be workerGlobalScope's embedder policy.

  3. Let ownerPolicy be owner's embedder policy.

  4. If ownerPolicy's report-only value is "require-corp" and policy's value is "unsafe-none", then queue a cross-origin embedder policy inheritance violation with response, "worker initialization", owner's policy's report only reporting endpoint, "reporting", and owner.

  5. If ownerPolicy's value is "unsafe-none" or policy's value is "require-corp", then return true.

  6. Queue a cross-origin embedder policy inheritance violation with response, "worker initialization", owner's policy's reporting endpoint, "enforce", and owner.

  7. falseを返す。

To queue a cross-origin embedder policy inheritance violation given a response response, a string type, a string endpoint, a string disposition, and an environment settings object settings:

  1. Let serialized be the result of serializing a response URL for reporting with response.

  2. Let body be a new object containing the following properties:

    keyvalue
    typetype
    blockedURLserialized
    dispositiondisposition
  3. Queue body as the "coep" report type for endpoint on settings.