Living Standard — Last Updated 17 December 2024
このセクションは、ウェブブラウザーに最も直接的に適用される機能について説明する。それでもやはり、特に指定しない限り、このセクションで定義されている要件は、ウェブブラウザーであるかどうかに関わらず、すべてのユーザーエージェントに適用される。
生成元は、ウェブのセキュリティモデルの基本的な通貨である。生成元を共有するウェブプラットフォーム内の2つの当事者が互いに信頼し、同一の権限を有すると仮定される。異なる生成元をもつ当事者は、互いに潜在的に悪意があると見なされ、互いから程度を変化させるよう隔離される。
たとえば、bank.example.com
でホストされるExample Bankのウェブサイトは、charity.example.org
でホストExample CharityのウェブサイトのDOMを検査しようとすると、"SecurityError
" DOMException
が発生する。
生成元は次のいずれかである:
内部値であり、シリアライズされていないために再作成することができない(生成元のシリアライズごとに"null
"としてシリアライズされる)。意味のある操作は、透過性のテストのみである。
タプルは以下で構成される:
生成元は、たとえば複数のDocument
オブジェクト間で共有できる。さらに、生成元は一般に不変である。タプルの生成元のドメインのみ、およびdocument.domain
APIを介してのみ変更できる。
生成元originの有効ドメインは、次のように計算される:
The serialization of an origin is the string obtained by applying the following algorithm to the given origin origin:
If origin is an opaque origin, then return "null
".
Otherwise, let result be origin's scheme.
Append "://
" to result.
Append origin's host, serialized, to result.
If origin's port is non-null, append a U+003A COLON character (:), and origin's port, serialized, to result.
Return result.
("https
", "xn--maraa-rta.example
", null, null)の シリアライゼーションは"https://xn--maraa-rta.example
"となる。
There used to also be a Unicode serialization of an origin. However, it was never widely adopted.
Two origins, A and B, are said to be same origin if the following algorithm returns true:
If A and B are the same opaque origin, then return true.
If A and B are both tuple origins and their schemes, hosts, and port are identical, then return true.
falseを返す。
Two origins, A and B, are said to be same origin-domain if the following algorithm returns true:
If A and B are the same opaque origin, then return true.
If A and B are both tuple origins:
If A and B's schemes are identical, and their domains are identical and non-null, then return true.
Otherwise, if A and B are same origin and their domains are both null, return true.
falseを返す。
A | B | same origin | same origin-domain |
---|---|---|---|
("https ", "example.org ", null, null) | ("https ", "example.org ", null, null) | ✅ | ✅ |
("https ", "example.org ", 314, null) | ("https ", "example.org ", 420, null) | ❌ | ❌ |
("https ", "example.org ", 314, "example.org ") | ("https ", "example.org ", 420, "example.org ") | ❌ | ✅ |
("https ", "example.org ", null, null) | ("https ", "example.org ", null, "example.org ") | ✅ | ❌ |
("https ", "example.org ", null, "example.org ") | ("http ", "example.org ", null, "example.org ") | ❌ | ❌ |
スキームとホストは、スキーム(ASCII文字列)およびホスト(ホスト)のタプルである。
サイトは不透明な生成元またはscheme-and-hostである。
To obtain a site, given an origin origin, run these steps:
If origin is an opaque origin, then return origin.
If origin's host's registrable domain is null, then return (origin's scheme, origin's host).
Return (origin's scheme, origin's host's registrable domain).
Two sites, A and B, are said to be same site if the following algorithm returns true:
If A and B are the same opaque origin, then return true.
If A or B is an opaque origin, then return false.
If A's and B's scheme values are different, then return false.
If A's and B's host values are not equal, then return false.
Return true.
The serialization of a site is the string obtained by applying the following algorithm to the given site site:
If site is an opaque origin, then return "null
".
Let result be site[0].
Append "://
" to result.
Append site[1], serialized, to result.
Return result.
It needs to be clear from context that the serialized value is a site, not an origin, as there is not necessarily a syntactic difference between the two. For example, the origin ("https
", "shop.example
", null, null) and the site ("https
", "shop.example
") have the same serialization: "https://shop.example
".
Two origins, A and B, are said to be schemelessly same site if the following algorithm returns true:
If A and B are the same opaque origin, then return true.
If A and B are both tuple origins, then:
If hostA equals hostB and hostA's registrable domain is null, then return true.
If hostA's registrable domain equals hostB's registrable domain and is non-null, then return true.
falseを返す。
Two origins, A and B, are said to be same site if the following algorithm returns true:
Let siteA be the result of obtaining a site given A.
Let siteB be the result of obtaining a site given B.
If siteA is same site with siteB, then return true.
falseを返す。
同一生成元および同一origin-domainの概念とは異なり、スキームレスで同じサイトおよび同じサイトの場合、ポートおよびドメインコンポーネントは無視される。
URLで説明される理由により、同一生成元チェックを優先して、可能な場合は同じサイトおよびスキームレスで同じサイトの概念を回避すべきである。
wildlife.museum
、museum
、およびcom
は公開サフィックスであり、example.com
はそうではない:
A | B | schemelessly same site | same site |
---|---|---|---|
("https ", "example.com ") | ("https ", "sub.example.com ") | ✅ | ✅ |
("https ", "example.com ") | ("https ", "sub.other.example.com ") | ✅ | ✅ |
("https ", "example.com ") | ("http ", "non-secure.example.com ") | ✅ | ❌ |
("https ", "r.wildlife.museum ") | ("https ", "sub.r.wildlife.museum ") | ✅ | ✅ |
("https ", "r.wildlife.museum ") | ("https ", "sub.other.r.wildlife.museum ") | ✅ | ✅ |
("https ", "r.wildlife.museum ") | ("https ", "other.wildlife.museum ") | ❌ | ❌ |
("https ", "r.wildlife.museum ") | ("https ", "wildlife.museum ") | ❌ | ❌ |
("https ", "wildlife.museum ") | ("https ", "wildlife.museum ") | ✅ | ✅ |
("https ", "example.com ") | ("https ", "example.com. ") | ❌ | ❌ |
document.domain [ = domain ]
セキュリティチェックのために使用される現在のドメインを返す。
サブドメインを削除する値に設定し、生成元のドメインを変更し、同じドメインの他のサブドメイン(同じことを行う場合)のページが互いにアクセスできるようにすることができる。これにより、ドメインの異なるホスト上のページが、互いのDOMに同期的にアクセスできるようになる。
サンドボックス化されたiframe
、不透明な生成元をもつDocument
、およびブラウジングコンテキストのないDocument
において、セッターは"SecurityError
"例外を投げる。crossOriginIsolated
またはoriginAgentCluster
がtrueを返す場合、セッターは何もしない。
document.domain
セッターの使用を避ける。これは、同一生成元ポリシーが提供するセキュリティ保護を損なうものである。これは共有ホスティングを使用している場合に特に顕著である。たとえば、信頼できないサードパーティが同じIPアドレスだが異なるポートで HTTP サーバーをホストできる場合、document.domain
セッターを使用した後に生成元を比較するときにポートが無視されるため、通常は同じホスト上の2つの異なるサイトを保護する同一生成元の保護が失敗する。
これらのセキュリティ上の落とし穴があるため、この機能はウェブプラットフォームから削除されるプロセスにある。(これは何年もかかる長いプロセスである。)
代わりに、安全な方法で生成元間で通信するために、postMessage()
またはMessageChannel
オブジェクトを使用する。
The domain
getter steps are:
Let effectiveDomain be this's origin's effective domain.
If effectiveDomain is null, then return the empty string.
Return effectiveDomain, serialized.
The domain
setter steps are:
If this's browsing context is null, then throw a "SecurityError
" DOMException
.
If this's active sandboxing flag set has its sandboxed document.domain
browsing context flag set, then throw a "SecurityError
" DOMException
.
Let effectiveDomain be this's origin's effective domain.
If effectiveDomain is null, then throw a "SecurityError
" DOMException
.
If the given value is not a registrable domain suffix of and is not equal to effectiveDomain, then throw a "SecurityError
" DOMException
.
If the surrounding agent's agent cluster's is origin-keyed is true, then return.
Set this's origin's domain to the result of parsing the given value.
To determine if a scalar value string hostSuffixString is a registrable domain suffix of or is equal to a host originalHost:
If hostSuffixString is the empty string, then return false.
Let hostSuffix be the result of parsing hostSuffixString.
If hostSuffix is failure, then return false.
If hostSuffix does not equal originalHost, then:
If hostSuffix or originalHost is not a domain, then return false.
This excludes hosts that are IP addresses.
If hostSuffix, prefixed by U+002E (.), does not match the end of originalHost, then return false.
If any of the following are true:
hostSuffix equals hostSuffix's public suffix; or
hostSuffix, prefixed by U+002E (.), matches the end of originalHost's public suffix,
then return false. [URL]
Assert: originalHost's public suffix, prefixed by U+002E (.), matches the end of hostSuffix.
Return true.
hostSuffixString | originalHost | Outcome of is a registrable domain suffix of or is equal to | 注 |
---|---|---|---|
"0.0.0.0 " | 0.0.0.0 | ✅ | |
"0x10203 " | 0.1.2.3 | ✅ | |
"[0::1] " | ::1 | ✅ | |
"example.com " | example.com | ✅ | |
"example.com " | example.com. | ❌ | Trailing dot is significant. |
"example.com. " | example.com | ❌ | |
"example.com " | www.example.com | ✅ | |
"com " | example.com | ❌ | At the time of writing, com is a public suffix. |
"example " | example | ✅ | |
"compute.amazonaws.com " | example.compute.amazonaws.com | ❌ | At the time of writing, *.compute.amazonaws.com is a public suffix. |
"example.compute.amazonaws.com " | www.example.compute.amazonaws.com | ❌ | |
"amazonaws.com " | www.example.compute.amazonaws.com | ❌ | |
"amazonaws.com " | test.amazonaws.com | ✅ | At the time of writing, amazonaws.com is a registrable domain. |
window.originAgentCluster
このセクションで説明されている方法で、このWindow
がオリジンキーのエージェントクラスターに属す場合はtrueを返す。
セキュアなコンテキストで配信されたDocument
は、`Origin-Agent-Cluster
` HTTPレスポンスヘッダーを使用して、オリジンキーのエージェントクラスターに配置するように要求することができる。このヘッダーは構造化されたヘッダーであり、その値は真偽値でなければらない。[STRUCTURED-FIELDS]
新しいDocument
オブジェクトの作成と初期化の処理モデルによって、構造化されたヘッダーの真偽値ではない値(すなわち、`?1
`)は無視される。
このヘッダーを使用すると、結果として得られるDocument
のエージェントクラスタキーは、対応するサイトではなく、その生成元となる。目に見える効果として、これはdocument.domain
を使用して同一生成元の制限を緩和しようとしても何も実行されない代わりに、WebAssembly.Module
オブジェクトを生成元をまたいだDocument
に送信することができなくなることである(たとえ同じサイトであっても)。水面下で、この分離により、ユーザーエージェントは、プロセスやスレッドなどのエージェントクラスターに対応する実装固有のリソースをより効率的に割り当てることが可能になる。
ブラウジングコンテキストグループ内では、`Origin-Agent-Cluster
`ヘッダーは、たとえ一方がヘッダーを送信し、他方が送信しない場合でも、同一生成元のDocument
オブジェクトが異なるエージェントクラスターで終わる原因にはならないことに注意する。これは、履歴エージェントクラスタキーマップによって防止される。
つまり、originAgentCluster
ゲッターは、同じブラウジングコンテキストグループ内の以前にロードされた同一生成元のページでヘッダーが省略されていた場合、たとえヘッダーが設定されていても、falseを返すことができるということである。同様に、ヘッダーが設定されていなくてもtrueを返すことができる。
The originAgentCluster
getter steps are to return the surrounding agent's agent cluster's is origin-keyed.
不透明な生成元をもつDocument
は、無条件に生成元が分離されているとみなすことができる。その場合、ヘッダーは効果がなく、かつoriginAgentCluster
ゲッターは常にtrueを返すだろう。
同様に、エージェントクラスターのクロスオリジン分離モードが"none
"ではないDocument
は、自動的にオリジンキーが設定される。生成元をまたいだ分離を達成するために使用される`Cross-Origin-Opener-Policy
`および `Cross-Origin-Embedder-Policy
`ヘッダーは、同じアドレス空間内のすべてのものがそこに存在することを保証することを目的としているため、`Origin-Agent-Cluster
`ヘッダーは、リソースの割り当てに関する実装への追加のヒントとして有用であるかもしれない。しかし、それを追加しても、著者のコードに追加の目に見える影響はない。
An 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
"This is the (current) default and means that the document will occupy the same top-level browsing context as its predecessor, unless that document specified a different opener policy.
same-origin-allow-popups
"This forces the creation of a new top-level browsing context for the document, unless its predecessor specified the same opener policy and they are same origin.
same-origin
"This behaves the same as "same-origin-allow-popups
", with the addition that any auxiliary browsing context created needs to contain same origin documents that also have the same opener policy or it will appear closed to the opener.
same-origin-plus-COEP
"これは"same-origin
"と同じように動作するが、(新しい)トップレベルブラウジングコンテキストのグループの生成元をまたいだ分離を"logical
"または"concrete
"のいずれかに設定することが追加される。
"same-origin-plus-COEP
"は`Cross-Origin-Opener-Policy
`ヘッダーで直接設定することはできないが、`Cross-Origin-Opener-Policy: same-origin
`と`Cross-Origin-Embedder-Policy
` ヘッダー(値はクロスオリジン分離と互換)を一緒に設定した結果である。
noopener-allow-popups
"This forces the creation of a new top-level browsing context for the document, regardless of its predecessor.
While including a noopener-allow-popups
value severs the opener relationship between the document on which it is applied and its opener, it does not create a robust security boundary between those same-origin documents.
Other risks from same-origin applications include:
Same-origin requests fetching the document's content — could be mitigated through Fetch Metadata filtering. [FETCHMETADATA]
Same-origin framing - could be mitigated through X-Frame-Options
or CSP frame-ancestors
.
JavaScript accessible cookies - can be mitigated by ensuring all cookies are httponly
.
localStorage
access to sensitive data.
Service worker installation.
postMessage
or BroadcastChannel
messaging that exposes sensitive information.
Autofill which may not require user interaction for same-origin documents.
Developers using noopener-allow-popups
need to make sure that their sensitive applications don't rely on client-side features accessible to other same-origin documents, e.g., localStorage
and other client-side storage APIs, BroadcastChannel
and related same-origin communication mechanisms. They also need to make sure that their server-side endpoints don't return sensitive data to non-navigation requests, whose response content is accessible to same-origin documents.
An opener policy consists of:
A value, which is an opener policy value, initially "unsafe-none
".
レポーティングエンドポイント。これは文字列またはnullであり、最初はnullである。
A report-only value, which is an opener policy value, initially "unsafe-none
".
レポートのみのレポーティングエンドポイント。これは文字列またはnullであり、最初はnullである。
To match opener policy values, given an opener policy value documentCOOP, an origin documentOrigin, an opener policy value responseCOOP, and an origin responseOrigin:
If documentCOOP is "unsafe-none
" and responseCOOP is "unsafe-none
", then return true.
If documentCOOP is "unsafe-none
" or responseCOOP is "unsafe-none
", then return false.
If documentCOOP is responseCOOP and documentOrigin is same origin with responseOrigin, then return true.
falseを返す。
Headers/Cross-Origin-Opener-Policy
Support in all current engines.
Document
の生成元をまたいだオープナーポリシーは `Cross-Origin-Opener-Policy
`および`Cross-Origin-Opener-Policy-Report-Only
` HTTPレスポンスヘッダーから派生する。このヘッダーは構造化されたヘッダーであり、その値はトークンでなければならない。[STRUCTURED-FIELDS]
妥当なトークンの値は、オープナーポリシー値である。トークンはまた、付属のパラメーターを持ってもよい。これらのうち、"report-to
"パラメーターは、適切な報告エンドポイントを識別する妥当なURL文字列を持つことができる。[REPORTING]
以下に説明する処理モデルに従って、ユーザーエージェントは、このヘッダーに不正値が含まれている場合、そのヘッダーを無視する。同様に、値がトークンとして解析できない場合、ユーザーエージェントはこのヘッダーを無視する。
To obtain an opener policy given a response response and an environment reservedEnvironment:
Let policy be a new opener policy.
If reservedEnvironment is a non-secure context, then return policy.
Let parsedItem be the result of getting a structured field value given `Cross-Origin-Opener-Policy
` and "item
" from response's header list.
If parsedItem is not null, then:
If parsedItem[0] is "same-origin
", then:
Let coep be the result of obtaining a cross-origin embedder policy from response and reservedEnvironment.
If coep's value is compatible with cross-origin isolation, then set policy's value to "same-origin-plus-COEP
".
Otherwise, set policy's value to "same-origin
".
If parsedItem[0] is "same-origin-allow-popups
", then set policy's value to "same-origin-allow-popups
".
If parsedItem[0] is "noopener-allow-popups
", then set policy's value to "noopener-allow-popups
".
If parsedItem[1]["report-to
"] exists and it is a string, then set policy's reporting endpoint to parsedItem[1]["report-to
"].
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.
If parsedItem is not null, then:
If parsedItem[0] is "same-origin
", then:
Let coep be the result of obtaining a cross-origin embedder policy from response and reservedEnvironment.
If coep's value is compatible with cross-origin isolation or coep's report-only value is compatible with cross-origin isolation, 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.
Otherwise, set policy's report-only value to "same-origin
".
If parsedItem[0] is "same-origin-allow-popups
", then set policy's report-only value to "same-origin-allow-popups
".
If parsedItem[1]["report-to
"] exists and it is a string, then set policy's report-only reporting endpoint to parsedItem[1]["report-to
"].
Return policy.
To check if popup COOP values require a browsing context group switch, given two origins responseOrigin and activeDocumentNavigationOrigin, and two opener policy values responseCOOPValue and activeDocumentCOOPValue:
responseCOOPValue is "noopener-allow-popups
", then return true.
If all of the following are true:
activeDocumentCOOPValue's value is "same-origin-allow-popups
" or "noopener-allow-popups
"; and
responseCOOPValue is "unsafe-none
",
then return false.
If the result of matching activeDocumentCOOPValue, activeDocumentNavigationOrigin, responseCOOPValue, and responseOrigin is true, then return false.
Return true.
To check if COOP values require a browsing context group switch, given a boolean isInitialAboutBlank, two origins responseOrigin and activeDocumentNavigationOrigin, and two opener policy values responseCOOPValue and activeDocumentCOOPValue:
If isInitialAboutBlank is true, then return the result of checking if popup COOP values requires a browsing context group switch with responseOrigin, activeDocumentNavigationOrigin, responseCOOPValue, and activeDocumentCOOPValue.
Here we are dealing with a non-popup navigation.
If the result of matching activeDocumentCOOPValue, activeDocumentNavigationOrigin, responseCOOPValue, and responseOrigin is true, then return false.
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 opener policies responseCOOP and activeDocumentCOOP:
If the result of checking if COOP values require a browsing context group switch given isInitialAboutBlank, 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 opener policy on all its pages and not receive violation reports for navigations between these pages.
If the result of checking if COOP values require a browsing context group switch given isInitialAboutBlank, responseOrigin, activeDocumentNavigationOrigin, responseCOOP's value and activeDocumentCOOPReportOnly's report-only value is true, then return true.
If the result of checking if COOP values require a browsing context group switch given isInitialAboutBlank, responseOrigin, activeDocumentNavigationOrigin, responseCOOP's report-only value and activeDocumentCOOPReportOnly's value is true, then return true.
falseを返す。
An opener policy enforcement result is a struct with the following items:
A boolean needs a browsing context group switch, initially false.
A boolean would need a browsing context group switch due to report-only, initially false.
A URL url.
An origin origin.
An opener policy opener policy.
A boolean current context is navigation source, initially false.
To enforce a response's opener policy, given a browsing context browsingContext, a URL responseURL, an origin responseOrigin, an opener policy responseCOOP, an opener policy enforcement result currentCOOPEnforcementResult, and a referrer referrer:
Let newCOOPEnforcementResult be a new opener policy enforcement result with
Let isInitialAboutBlank be browsingContext's active document's is initial about:blank
.
If isInitialAboutBlank is true and browsingContext's initial URL is null, set browsingContext's initial URL to responseURL.
If the result of checking if COOP values require a browsing context group switch given isInitialAboutBlank, currentCOOPEnforcementResult's opener policy's value, currentCOOPEnforcementResult's origin, responseCOOP's value, and responseOrigin is true, then:
Set newCOOPEnforcementResult's needs a browsing context group switch to true.
If browsingContext's group's browsing context set's size is greater than 1, then:
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.
Queue a violation report for browsing context group switch when navigating away from a COOP response with currentCOOPEnforcementResult's opener policy, "enforce
", currentCOOPEnforcementResult's url, responseURL, currentCOOPEnforcementResult's origin, responseOrigin, and currentCOOPEnforcementResult's current context is navigation source.
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 opener policy, is true, then:
Set result's would need a browsing context group switch due to report-only to true.
If browsingContext's group's browsing context set's size is greater than 1, then:
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.
Queue a violation report for browsing context group switch when navigating away from a COOP response with currentCOOPEnforcementResult's opener policy, "reporting
", currentCOOPEnforcementResult's url, responseURL, currentCOOPEnforcementResult's origin, responseOrigin, and currentCOOPEnforcementResult's current context is navigation source.
Return newCOOPEnforcementResult.
To obtain a browsing context to use for a navigation response, given navigation params navigationParams:
Let browsingContext be navigationParams's navigable's active browsing context.
If browsingContext is not a top-level browsing context, then return browsingContext.
Let coopEnforcementResult be navigationParams's COOP enforcement result.
Let swapGroup be coopEnforcementResult's needs a browsing context group switch.
Let sourceOrigin be browsingContext's active document's origin.
Let destinationOrigin be navigationParams's origin.
If sourceOrigin is not same site with destinationOrigin:
If either of sourceOrigin or destinationOrigin have a scheme that is not an HTTP(S) scheme and the user agent considers it necessary for sourceOrigin and destinationOrigin to be isolated from each other (for implementation-defined reasons), optionally set swapGroup to true.
For example, if a user navigates from about:settings
to https://example.com
, the user agent could force a swap.
Issue #10842 tracks settling on an interoperable behavior here, instead of letting this be optional.
If navigationParams's user involvement is "browser UI
", optionally set swapGroup to true.
Issue #6356 tracks settling on an interoperable behavior here, instead of letting this be optional.
If browsingContext's group's browsing context set's size is 1, optionally set swapGroup to true.
Some implementations swap browsing context groups here for performance reasons.
The check for other contexts that could script this one is not sufficient to prevent differences in behavior that could affect a web page. Even if there are currently no other contexts, the destination page could open a window, then if the user navigates back, the previous page could expect to be able to script the opened window. Doing a swap here would break that use case.
If swapGroup is false, then:
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.
Return browsingContext.
Let newBrowsingContext be the first return value of creating a new top-level browsing context and document.
In this case we are going to perform a browsing context group swap. browsingContext will not be used by the new Document
that we are about to create. If it is not used by other Document
s either (such as ones in the back/forward cache), then the user agent might destroy it at this point.
Let navigationCOOP be navigationParams's cross-origin opener policy.
If navigationCOOP's value is "same-origin-plus-COEP
", then set newBrowsingContext's group's cross-origin isolation mode to either "logical
" or "concrete
". The choice of which is implementation-defined.
It is difficult on some platforms to provide the security properties required by the cross-origin isolated capability. "concrete
" grants access to it and "logical
" does not.
Let sandboxFlags be a clone of navigationParams's final sandboxing flag set.
If sandboxFlags is not empty, then:
Assert: navigationCOOP's value is "unsafe-none
".
Assert: newBrowsingContext's popup sandboxing flag set is empty.
Set newBrowsingContext's popup sandboxing flag set to sandboxFlags.
Return newBrowsingContext.
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:
The accessor browsing context or one of its ancestors is the opener browsing context of the accessed browsing context's top-level browsing context.
The accessed browsing context or one of its ancestors is the opener browsing context of the accessor browsing context's top-level browsing context.
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:
If P is not a cross-origin accessible window property name, then return.
Assert: accessor's active document and accessed's active document are both fully active.
Let accessorTopDocument be accessor's top-level browsing context's active document.
Let accessorInclusiveAncestorOrigins be the list obtained by taking the origin of the active document of each of accessor's active document's inclusive ancestor navigables.
Let accessedTopDocument be accessed's top-level browsing context's active document.
Let accessedInclusiveAncestorOrigins be the list obtained by taking the origin of the active document of each of accessed's active document's inclusive ancestor navigables.
If any of accessorInclusiveAncestorOrigins are not same origin with accessorTopDocument's origin, or if any of accessedInclusiveAncestorOrigins are not same origin with accessedTopDocument's origin, then return.
This avoids leaking information about cross-origin iframes to a top level frame with opener policy reporting.
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.
Let accessorAccessedRelationship be a new accessor-accessed relationship with value none.
If accessed's top-level browsing context's opener browsing context is accessor or is an ancestor of accessor, then set accessorAccessedRelationship to accessor is opener.
If accessor's top-level browsing context's opener browsing context is accessed or is an ancestor of accessed, then set accessorAccessedRelationship to accessor is openee.
Queue violation reports for accesses, given accessorAccessedRelationship, accessorTopDocument's opener policy, accessedTopDocument's 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, accessorTopDocument's referrer, accessedTopDocument's referrer, P, and environment.
To sanitize a URL to send in a report given a URL url:
Let sanitizedURL be a copy of url.
Set the username given sanitizedURL and the empty string.
Set the password given sanitizedURL and the empty string.
Return the serialization of sanitizedURL with exclude fragment set to true.
To queue a violation report for browsing context group switch when navigating to a COOP response given an opener policy coop, a string disposition, a URL coopURL, a URL previousResponseURL, two origins coopOrigin and previousResponseOrigin, and a referrer referrer:
If coop's reporting endpoint is null, return.
Let coopValue be coop's value.
If disposition is "reporting
", then set coopValue to coop's report-only value.
Let serializedReferrer be an empty string.
If referrer is a URL, set serializedReferrer to the serialization of referrer.
Let body be a new object containing the following properties:
key | value |
---|---|
disposition | disposition |
effectivePolicy | coopValue |
previousResponseURL | If coopOrigin and previousResponseOrigin are same origin this is the sanitization of previousResponseURL, null otherwise. |
referrer | serializedReferrer |
type | "navigation-to-response " |
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 an opener policy coop, a string disposition, a URL coopURL, a URL nextResponseURL, two origins coopOrigin and nextResponseOrigin, and a boolean isCOOPResponseNavigationSource:
If coop's reporting endpoint is null, return.
Let coopValue be coop's value.
If disposition is "reporting
", then set coopValue to coop's report-only value.
Let body be a new object containing the following properties:
key | value |
---|---|
disposition | disposition |
effectivePolicy | coopValue |
nextResponseURL | If coopOrigin and nextResponseOrigin are same origin or isCOOPResponseNavigationSource is true, this is the sanitization of previousResponseURL, null otherwise. |
type | "navigation-from-response " |
Queue body as "coop
" for coop's reporting endpoint with coopURL.
To queue violation reports for accesses, given an accessor-accessed relationship accessorAccessedRelationship, two 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:
If coop's reporting endpoint is null, return.
Let coopValue be coop's value.
If disposition is "reporting
", then set coopValue to coop's report-only value.
If accessorAccessedRelationship is accessor is opener:
Queue a violation report for access to an opened window, given accessorCOOP, accessorURL, accessedURL, accessedInitialURL, accessorOrigin, accessedOrigin, accessedCreatorOrigin, propertyName, and environment.
Queue a violation report for access from the opener, given accessedCOOP, accessedURL, accessorURL, accessedOrigin, accessorOrigin, propertyName, and accessedReferrer.
Otherwise, if accessorAccessedRelationship is accessor is openee:
Queue a violation report for access to the opener, given accessorCOOP, accessorURL, accessedURL, accessorOrigin, accessedOrigin, propertyName, accessorReferrer, and environment.
Queue a violation report for access from an opened window, given accessedCOOP, accessedURL, accessorURL, accessorInitialURL, accessedOrigin, accessorOrigin, accessorCreatorOrigin, and propertyName.
Otherwise:
Queue a violation report for access to another window, given accessorCOOP, accessorURL, accessedURL, accessorOrigin, accessedOrigin, propertyName, and environment
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 an 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:
Let sourceFile, lineNumber and columnNumber be the relevant script URL and problematic position which triggered this report.
Let serializedReferrer be an empty string.
If referrer is a URL, set serializedReferrer to the serialization of referrer.
Let body be a new object containing the following properties:
key | value |
---|---|
disposition | "reporting " |
effectivePolicy | coop's report-only value |
property | propertyName |
openerURL | If coopOrigin and openerOrigin are same origin, this is the sanitization of openerURL, null otherwise. |
referrer | serializedReferrer |
sourceFile | sourceFile |
lineNumber | lineNumber |
columnNumber | columnNumber |
type | "access-to-opener " |
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 an opener policy coop, three URLs coopURL, openedWindowURL and initialWindowURL, three origins coopOrigin, openedWindowOrigin, and openerInitialOrigin, a string propertyName, and an environment settings object environment:
Let sourceFile, lineNumber and columnNumber be the relevant script URL and problematic position which triggered this report.
Let body be a new object containing the following properties:
key | value |
---|---|
disposition | "reporting " |
effectivePolicy | coop's report-only value |
property | propertyName |
openedWindowURL | If coopOrigin and openedWindowOrigin are same origin, this is the sanitization of openedWindowURL, null otherwise. |
openedWindowInitialURL | If coopOrigin and openerInitialOrigin are same origin, this is the sanitization of initialWindowURL, null otherwise. |
sourceFile | sourceFile |
lineNumber | lineNumber |
columnNumber | columnNumber |
type | "access-to-opener " |
Queue body as "coop
" for coop's reporting endpoint with coopURL and environment.
To queue a violation report for access to another window, given an opener policy coop, two URLs coopURL and otherURL, two origins coopOrigin and otherOrigin, a string propertyName, and an environment settings object environment:
Let sourceFile, lineNumber and columnNumber be the relevant script URL and problematic position which triggered this report.
Let body be a new object containing the following properties:
key | value |
---|---|
disposition | "reporting " |
effectivePolicy | coop's report-only value |
property | propertyName |
otherURL | If coopOrigin and otherOrigin are same origin, this is the sanitization of otherURL, null otherwise. |
sourceFile | sourceFile |
lineNumber | lineNumber |
columnNumber | columnNumber |
type | "access-to-opener " |
Queue body as "coop
" for coop's reporting endpoint with coopURL and environment.
To queue a violation report for access from the opener, given an opener policy coop, two URLs coopURL and openerURL, two origins coopOrigin and openerOrigin, a string propertyName, and a referrer referrer:
If coop's reporting endpoint is null, return.
Let serializedReferrer be an empty string.
If referrer is a URL, set serializedReferrer to the serialization of referrer.
Let body be a new object containing the following properties:
key | value |
---|---|
disposition | "reporting " |
effectivePolicy | coop's report-only value |
property | propertyName |
openerURL | If coopOrigin and openerOrigin are same origin, this is the sanitization of openerURL, null otherwise. |
referrer | serializedReferrer |
type | "access-to-opener " |
Queue body as "coop
" for coop's reporting endpoint with coopURL.
To queue a violation report for access from an opened window, given an opener policy coop, three URLs coopURL, openedWindowURL and initialWindowURL, three origins coopOrigin, openedWindowOrigin, and openerInitialOrigin, and a string propertyName:
If coop's reporting endpoint is null, return.
Let body be a new object containing the following properties:
key | value |
---|---|
disposition | "reporting " |
effectivePolicy | coopValue |
property | coop's report-only value |
openedWindowURL | If coopOrigin and openedWindowOrigin are same origin, this is the sanitization of openedWindowURL, null otherwise. |
openedWindowInitialURL | If coopOrigin and openerInitialOrigin are same origin, this is the sanitization of initialWindowURL, null otherwise. |
type | "access-to-opener " |
Queue body as "coop
" for coop's reporting endpoint with coopURL.
To queue a violation report for access from another window, given an opener policy coop, two URLs coopURL and otherURL, two origins coopOrigin and otherOrigin, and a string propertyName:
If coop's reporting endpoint is null, return.
Let body be a new object containing the following properties:
key | value |
---|---|
disposition | "reporting " |
effectivePolicy | coop's report-only value |
property | propertyName |
otherURL | If coopOrigin and otherOrigin are same origin, this is the sanitization of otherURL, null otherwise. |
type | access-to-opener |
Queue body as "coop
" for coop's reporting endpoint with coopURL.
Headers/Cross-Origin-Embedder-Policy
Support in all current engines.
埋め込みポリシー値は、リソース所有者からの明示的な許可なしに、生成元をまたいだリソースのフェッチを制御する3つの文字列の1つである。
unsafe-none
"これはデフォルトの値である。この値を使用するとき、CORSプロトコルまたは`Cross-Origin-Resource-Policy
`ヘッダーを通して明示的な許可を与えることなしに生成元をまたいだリソースをフェッチすることができる。
require-corp
"この値を使用するとき、生成元をまたいだリソースをフェッチするには、CORSプロトコルまたは`Cross-Origin-Resource-Policy
`ヘッダーを通してサーバーの明示的な許可が必要となる。
credentialless
"この値を使用する場合、生成元をまたいだno-CORSリソースをフェッチすると、クレデンシャルが省略される。代わりに、明示的な`Cross-Origin-Resource-Policy
`ヘッダーは必要ない。クレデンシャルを使用して送信されるその他のリクエストには、CORSプロトコルまたは `Cross-Origin-Resource-Policy
`ヘッダーを介したサーバーの明示的な権限が必要である。
"credentialless
"をサポートする前に、実装者は次の両方をサポートすることを強く勧める:
そうでなければ、攻撃者は、生成元をまたいだ分離機能を使用して、クライアントのネットワーク位置を利用して非公開リソースを読み取ることを可能にする。
エンベッダーポリシー値は、"credentialless
"または"require-corp
"である場合、生成元をまたいだ分離と互換性がある。
埋め込みポリシーは次で構成される:
値。これは埋め込みポリシー値であり、初期は"unsafe-none
"。
報告エンドポイント文字列。初期は空文字列。
報告のみの値。これは埋め込みポリシー値であり、初期は"unsafe-none
"。
報告のみの報告エンドポイント文字列。初期は空文字列。
"coep
"報告タイプは、値が"coep
"となる報告タイプである。これはReportingObserver
から可視である。
`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 and an environment environment:
Let policy be a new embedder policy.
If environment is a non-secure context, then return policy.
Let parsedItem be the result of getting a structured field value with `Cross-Origin-Embedder-Policy
` and "item
" from response's header list.
If parsedItem is non-null and parsedItem[0] is compatible with cross-origin isolation:
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.
If parsedItem is non-null and parsedItem[0] is compatible with cross-origin isolation:
Set policy's report only value to parsedItem[0].
If parsedItem[1]["report-to
"] exists, then set policy's endpoint to parsedItem[1]["report-to
"].
Return policy.
To check a navigation response's adherence to its embedder policy given a response response, a navigable navigable, and an embedder policy responsePolicy:
If navigable is not a child navigable, then return true.
Let parentPolicy be navigable's container document's policy container's embedder policy.
If parentPolicy's report-only value is compatible with cross-origin isolation and responsePolicy's value is not, then queue a cross-origin embedder policy inheritance violation with response, "navigation
", parentPolicy's report only reporting endpoint, "reporting
", and navigable's container document's relevant settings object.
If parentPolicy's value is not compatible with cross-origin isolation or responsePolicy's value is compatible with cross-origin isolation, then return true.
Queue a cross-origin embedder policy inheritance violation with response, "navigation
", parentPolicy's reporting endpoint, "enforce
", and navigable's container document's relevant settings object.
falseを返す。
To check a global object's embedder policy given a WorkerGlobalScope
workerGlobalScope, an environment settings object owner, and a response response:
If workerGlobalScope is not a DedicatedWorkerGlobalScope
object, then return true.
Let policy be workerGlobalScope's embedder policy.
Let ownerPolicy be owner's policy container's embedder policy.
If ownerPolicy's report-only value is compatible with cross-origin isolation and policy's value is not, then queue a cross-origin embedder policy inheritance violation with response, "worker initialization
", ownerPolicy's report only reporting endpoint, "reporting
", and owner.
If ownerPolicy's value is not compatible with cross-origin isolation or policy's value is compatible with cross-origin isolation, then return true.
Queue a cross-origin embedder policy inheritance violation with response, "worker initialization
", ownerPolicy's reporting endpoint, "enforce
", and owner.
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:
Let serialized be the result of serializing a response URL for reporting with response.
Let body be a new object containing the following properties:
key | value |
---|---|
type | type |
blockedURL | serialized |
disposition | disposition |
Queue body as the "coep
" report type for endpoint on settings.
サンドボックスフラグセットは以下のフラグの0個以上の集合であり、これは潜在的に信頼されないリソースが持つ能力を制限するために使用される:
このフラグは、コンテンツが、サンドボックス化されたブラウジングコンテキスト自体(またはその中にさらにネストされたブラウジングコンテキスト)、補助ブラウジングコンテキスト(次に定義されるサンドボックス化された補助ナビゲーションブラウジングコンテキストフラグによって保護されている)、およびトップレベルブラウジングコンテキスト(サンドボックス化されたユーザー起動ブラウジングコンテキストフラグなしのトップレベルナビゲーション、および以下に定義されるサンドボックス化されたユーザー起動ブラウジングコンテキストフラグありトップレベルナビゲーションによって保護されている)以外のブラウジングコンテキストをナビゲートすることを防止するものである。
サンドボックス化された補助ナビゲーションブラウジングコンテキストフラグが設定されない場合、それにもかかわらず一定の場合における制限はポップアップ(新しいトップレベルブラウジングコンテキスト)を開くことができる。これらのブラウジングコンテキストは常に、1つの許可されたサンドボックス化されたナビゲーターを持ち、実際に移動するために作成したブラウジングコンテキストを許可する、ブラウジングコンテキストが作成されるときに設定を持つ。(そうでなければ、サンドボックス化されたナビゲーションブラウジングコンテキストフラグは、それらが開かれた場合であってもナビゲートされていくのを防ぐだろう。)
このフラグは、コンテンツが新しい補助ブラウジングコンテキストを作成するのを防ぐ。 たとえば、target
属性やwindow.open()
メソッドを使用する。
このフラグは、それらのトップレベルブラウジングコンテキストのナビゲートからコンテンツを防ぎ、かつそれらのトップレベルブラウジングコンテキストの遮断からコンテンツを防ぐ。サンドボックス化されたブラウジングコンテキストのアクティブウィンドウが一時的なアクティブ化を持たない場合にのみ考慮される。
ユーザーによるアクティブ化なしでサンドボックス化されたトップレベルナビゲーションブラウジングコンテキストフラグが設定されていない場合、コンテンツはそのトップレベルブラウジングコンテキストをナビゲートすることができるが、他のブラウジングコンテキストは、サンドボックス化されたナビゲーションブラウジングコンテキストフラグ、およびサンドボックス化された補助ナビゲーションブラウジングコンテキストフラグによって保護されたままである。
このフラグは、それらのトップレベルブラウジングコンテキストのナビゲートからコンテンツを防ぎ、かつそれらのトップレベルブラウジングコンテキストの遮断からコンテンツを防ぐ。サンドボックス化されたブラウジングコンテキストのアクティブウィンドウが一時的なアクティブ化を持つ場合にのみ考慮される。
ユーザーによるアクティブ化なしでサンドボックス化されたブラウジングコンテキストフラグと同様に、このフラグはトップレベルブラウジングコンテキストにのみ影響する。 設定されていない場合、他のブラウジングコンテキストが他のフラグによって保護されている可能性がある。
This flag forces content into an opaque origin, thus preventing it from accessing other content from the same origin.
このフラグはまた、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:
Split input on ASCII whitespace, to obtain tokens.
outputを空にする。
outputに次のフラグを追加する:
tokensがallow-popups
キーワードを含む場合を除いて、サンドボックス化された補助ナビゲーションブラウジングコンテキストフラグ
The sandboxed top-level navigation without user activation browsing context flag, unless tokens contains the allow-top-navigation
keyword.
The sandboxed top-level navigation with user activation browsing context flag, unless tokens contains either the allow-top-navigation-by-user-activation
keyword or the allow-top-navigation
keyword.
This means that if the allow-top-navigation
is present, the allow-top-navigation-by-user-activation
keyword will have no effect. For this reason, specifying both is a document conformance error.
tokensがallow-same-origin
キーワードを含む場合を除いて、サンドボックス化された生成元ブラウジングコンテキストフラグ
allow-same-origin
キーワードは2つの例を対象とする。
1つ目は、依然としてサンドボックス化されたコンテンツのDOMへのアクセスを可能する一方で、スクリプトを無効にするためにサンドボックス化されるべき同じサイトからコンテンツを許可するために使用できる。
2つ目は、サードパーティサイトからコンテンツを埋め込むために使用でき、データなどを格納するためにデータベースAPIを使用して、その元のサイトに戻る通信から埋め込まれたページを妨げることなく、ポップアップなどを開いてから、そのサイトを防ぐためにサンドボックス化する。
tokensがallow-forms
キーワードを含む場合を除いて、サンドボックス化されたフォームブラウジングコンテキストフラグ
tokensがallow-pointer-lock
キーワードを含む場合を除いて、サンドボックス化されたポインターロックブラウジングコンテキストフラグ
tokensがallow-scripts
キーワードを含む場合を除いて、サンドボックス化されたスクリプトブラウジングコンテキストフラグ
tokensが(上記で定義された)allow-scripts
キーワードを含む場合を除いて、サンドボックス化された自動機能ブラウジングコンテキストフラグ
このフラグは、スクリプトと同じキーワードで緩和される。なぜなら、スクリプトが有効である場合にこれらの機能はいずれにせよ些細なことで実行でき、宣言的な機能を使用できるようにするよりむしろサンドボックス化された場合に、著者がそれら機能を実行するためのスクリプトを使用するよう強制することが不幸であるためである。
The sandbox propagates to auxiliary browsing contexts flag, unless tokens contains the allow-popups-to-escape-sandbox
keyword.
The sandboxed modals flag, unless tokens contains the allow-modals
keyword.
The sandboxed orientation lock browsing context flag, unless tokens contains the allow-orientation-lock
keyword.
The sandboxed presentation browsing context flag, unless tokens contains the allow-presentation
keyword.
The sandboxed downloads browsing context flag, unless tokens contains the allow-downloads
keyword.
The sandboxed custom protocols navigation browsing context flag, unless tokens contains either the allow-top-navigation-to-custom-protocols
keyword, the allow-popups
keyword, or the allow-top-navigation
keyword.
すべてのトップレベルブラウジングコンテキストは、ポップアップサンドボックス化 フラグセットを持ち、これはサンドボックス化フラグセットである。ブラウジングコンテキストが作成される場合、そのポップアップサンド化フラグセットは空でなければならない。It is populated by the rules for choosing a navigable and the obtain a browsing context to use for a navigation response algorithm.
すべてのiframe
要素は、iframe
サンドボックス化フラグセットを持ち、これはサンドボックス化フラグセットである。iframe
サンドボックス化フラグセットのどのフラグが特定の時間にセットされるかは、iframe
要素のsandbox
属性によって決定される。
すべてのDocument
は、アクティブなサンドボックス化フラグセットを持ち、これはサンドボックス化フラグセットである、Document
が作成される場合、そのアクティブなサンドボックス化フラグセットは空でなければならない。それは、ナビゲーションアルゴリズムによって追加される。
Every CSP list cspList has CSP-derived sandboxing flags, which is a sandboxing flag set. It is the return value of the following algorithm:
Let directives be an empty ordered set.
For each policy in cspList:
If policy's disposition is not "enforce
", then continue.
If policy's directive set contains a directive whose name is "sandbox
", then append that directive to directives.
If directives is empty, then return an empty sandboxing flag set.
Let directive be directives[directives's size − 1].
Return the result of parsing the sandboxing directive directive.
nullまたは要素embedderを指定して、ブラウジングコンテキストbrowsing contextの作成サンドボックスフラグを決定するには、次のサンドボックスフラグセットに存在するフラグの和集合を返す。
embedderがnullである場合:browsing contextのポップアップサンドボックス化フラグセットのフラグセット。
embedderが要素である場合:embedderのiframe
サンドボックス化フラグセットのフラグセット。
embedderが要素である場合:embedderのノード文書のアクティブなサンドボックス化フラグセットのフラグセット。
A policy container is a struct containing policies that apply to a Document
, a WorkerGlobalScope
, or a WorkletGlobalScope
. It has the following items:
A CSP list, which is a CSP list. It is initially empty.
An embedder policy, which is an embedder policy. It is initially a new embedder policy.
A referrer policy, which is a referrer policy. It is initially the default referrer policy.
Move other policies into the policy container.
To clone a policy container given a policy container policyContainer:
Let clone be a new policy container.
For each policy in policyContainer's CSP list, append a copy of policy into clone's CSP list.
Set clone's embedder policy to a copy of policyContainer's embedder policy.
Set clone's referrer policy to policyContainer's referrer policy.
Return clone.
To determine whether a URL url requires storing the policy container in history:
To create a policy container from a fetch response given a response response and an environment-or-null environment:
If response's URL's scheme is "blob
", then return a clone of response's URL's blob URL entry's environment's policy container.
Let result be a new policy container.
Set result's CSP list to the result of parsing a response's Content Security Policies given response.
If environment is non-null, then set result's embedder policy to the result of obtaining an embedder policy given response and environment. Otherwise, set it to "unsafe-none
".
Set result's referrer policy to the result of parsing the `Referrer-Policy
` header given response. [REFERRERPOLICY]
Return result.
To determine navigation params policy container given a URL responseURL and four policy container-or-nulls historyPolicyContainer, initiatorPolicyContainer, parentPolicyContainer, and responsePolicyContainer:
If historyPolicyContainer is not null, then:
Assert: responseURL requires storing the policy container in history.
Return a clone of historyPolicyContainer.
If responseURL is about:srcdoc
, then:
If responseURL is local and initiatorPolicyContainer is not null, then return a clone of initiatorPolicyContainer.
If responsePolicyContainer is not null, then return responsePolicyContainer.
Return a new policy container.
To initialize a worker global scope's policy container given a WorkerGlobalScope
workerGlobalScope, a response response, and an environment environment:
If workerGlobalScope's url is local but its scheme is not "blob
":
Set workerGlobalScope's policy container to a clone of workerGlobalScope's owner set[0]'s relevant settings object's policy container.
Otherwise, set workerGlobalScope's policy container to the result of creating a policy container from a fetch response given response and environment.