Skip to content

Commit 311934b

Browse files
Add credentialless value to COEP
This defines Cross-Origin-Embedder-Policy: credentialless. The credentialless and require-corp values are similar. One or the other is a requirements for the cross-origin isolated capability. They differ mostly in terms of fetching. require-corp requires a Cross-Origin-Resource-Policy header for cross-origin opaque responses. credentialless doesn't, but omits credentials (cookies, client certificates, etc.) in cross-origin "no-cors" requests. See https://github.com/WICG/credentiallessness for additional context. Fetch PR: whatwg/fetch#1229. Tests: WPT html/cross-origin-embedder-policy/credentialless. Closes #6637.
1 parent 6dad872 commit 311934b

1 file changed

Lines changed: 74 additions & 49 deletions

File tree

‎source‎

Lines changed: 74 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -79986,9 +79986,8 @@ console.assert(iframeWindow.frameElement === null);
7998679986
data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
7998779987
data-x="coop-same-origin">same-origin</span></code>`, and</p></li>
7998879988

79989-
<li><p>every <span>Document</span> has `<code
79990-
data-x=""><span>Cross-Origin-Embedder-Policy</span>: <span
79991-
data-x="coep-require-corp">require-corp</span></code>`.</p></li>
79989+
<li><p>every <span>Document</span> has a `<code>Cross-Origin-Embedder-Policy</code>` header
79990+
whose value is <span>compatible with cross-origin isolation</span>.</p></li>
7999279991
</ul>
7999379992

7999479993
<p>On some platforms, it is difficult to provide the security properties required to grant safe
@@ -83045,8 +83044,9 @@ interface <dfn interface>BarProp</dfn> {
8304583044
data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</code>` header, but results
8304683045
from a combination of setting both `<code data-x=""><span
8304783046
data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
83048-
data-x="coop-same-origin">same-origin</span></code>` and `<code
83049-
data-x=""><span>Cross-Origin-Embedder-Policy</span>: require-corp</code>` together.</p>
83047+
data-x="coop-same-origin">same-origin</span></code>` and a
83048+
`<code>Cross-Origin-Embedder-Policy</code>` header whose value is <span>compatible with
83049+
cross-origin isolation</span> together.<p>
8305083050
</dd>
8305183051
</dl>
8305283052

@@ -83135,8 +83135,8 @@ interface <dfn interface>BarProp</dfn> {
8313583135
policy">obtaining a cross-origin embedder policy</span> from <var>response</var> and
8313683136
<var>reservedEnvironment</var>.</p></li>
8313783137

83138-
<li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83139-
data-x="coep-require-corp">require-corp</code>", then set <var>policy</var>'s <span
83138+
<li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83139+
<span>compatible with cross-origin isolation</span>, then set <var>policy</var>'s <span
8314083140
data-x="coop-struct-value">value</span> to "<code
8314183141
data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p></li>
8314283142

@@ -83177,10 +83177,10 @@ interface <dfn interface>BarProp</dfn> {
8317783177
<var>reservedEnvironment</var>.</p></li>
8317883178

8317983179
<li>
83180-
<p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83181-
data-x="coep-require-corp">require-corp</code>" or <var>coep</var>'s <span
83182-
data-x="embedder-policy-report-only-value">report-only value</span> is "<code
83183-
data-x="coep-require-corp">require-corp</code>", then set <var>policy</var>'s <span
83180+
<p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83181+
<span>compatible with cross-origin isolation</span> or <var>coep</var>'s <span
83182+
data-x="embedder-policy-report-only-value">report-only value</span> is <span>compatible with
83183+
cross-origin isolation</span>, then set <var>policy</var>'s <span
8318483184
data-x="coop-struct-report-only-value">report-only value</span> to "<code
8318583185
data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p>
8318683186

@@ -84193,8 +84193,8 @@ interface <dfn interface>BarProp</dfn> {
8419384193

8419484194
<h3 id="coep">Cross-origin embedder policies</h3>
8419584195

84196-
<p>An <dfn export>embedder policy value</dfn> controls the fetching of cross-origin resources
84197-
without explicit permission from resource owners. There are two such values:</p>
84196+
<p>An <dfn export>embedder policy value</dfn> is one of three strings that controls the fetching
84197+
of cross-origin resources without explicit permission from resource owners.</p>
8419884198

8419984199
<dl>
8420084200
<dt>"<dfn data-x="coep-unsafe-none" export for="embedder policy value"><code
@@ -84208,8 +84208,34 @@ interface <dfn interface>BarProp</dfn> {
8420884208
<dd><p>When this value is used, fetching cross-origin resources requires the server's
8420984209
explicit permission through the <span>CORS protocol</span> or the
8421084210
`<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
84211+
84212+
<dt>"<dfn data-x="coep-credentialless" export for="embedder policy value"><code
84213+
data-x="">credentialless</code></dfn>"</dt>
84214+
<dd><p>When this value is used, fetching cross-origin no-CORS resources omits credentials. In
84215+
exchange, an explicit `<code>Cross-Origin-Resource-Policy</code>` header is not required. Other
84216+
requests sent with credentials require the server's explicit permission through the <span>CORS
84217+
protocol</span> or the `<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
8421184218
</dl>
8421284219

84220+
<div class="warning">
84221+
<p>Before supporting "<code data-x="coep-credentialless">credentialless</code>", implementers are
84222+
strongly encouraged to support both:
84223+
84224+
<ul class="brief">
84225+
<li><a href="https://wicg.github.io/private-network-access/">Private Network Access</a></li>
84226+
<li><a href="https://github.com/annevk/orb">Opaque Response Blocking</a></li>
84227+
</ul>
84228+
84229+
<p>Otherwise, it would allow attackers to leverage the client's network position to read non
84230+
public resources, using the <span
84231+
data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
84232+
capability</span>.</p>
84233+
</div>
84234+
84235+
<p>An <span>embedder policy value</span> is <dfn>compatible with cross-origin isolation</dfn> if
84236+
it is "<code data-x="coep-credentialless">credentialless</code>" or "<code
84237+
data-x="coep-require-corp">require-corp</code>".</p>
84238+
8421384239
<p>An <dfn export>embedder policy</dfn> consists of:</p>
8421484240

8421584241
<ul>
@@ -84314,17 +84340,17 @@ interface <dfn interface>BarProp</dfn> {
8431484340
<var>response</var>'s <span data-x="concept-response-header-list">header list</span>.</p></li>
8431584341

8431684342
<li>
84317-
<p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84318-
data-x="">require-corp</code>":</p>
84343+
<p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84344+
cross-origin isolation</span>:</p>
8431984345

8432084346
<ol>
84321-
<li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to "<code
84322-
data-x="coep-require-corp">require-corp</code>".</p></li>.
84347+
<li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to
84348+
<var>parsedItem</var>[0].</p></li>
8432384349

8432484350
<li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
8432584351
data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84326-
data-x="embedder-policy-reporting-endpoint">endpoint</span> to <var>parsedItem</var>[1]["<code
84327-
data-x="coep-report-to">report-to</code>"].</p></li>
84352+
data-x="embedder-policy-reporting-endpoint">endpoint</span> to
84353+
<var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8432884354
</ol>
8432984355
</li>
8433084356

@@ -84334,17 +84360,17 @@ interface <dfn interface>BarProp</dfn> {
8433484360
list</span>.</p></li>
8433584361

8433684362
<li>
84337-
<p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84338-
data-x="">require-corp</code>":</p>
84363+
<p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84364+
cross-origin isolation</span>:</p>
8433984365

8434084366
<ol>
84341-
<li><p>Set <var>policy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84342-
value</span> to "<code data-x="coep-require-corp">require-corp</code>".</p></li>.
84367+
<li><p>Set <var>policy</var>'s <span
84368+
data-x="embedder-policy-report-only-value">value</span> to <var>parsedItem</var>[0].</p></li>
8434384369

8434484370
<li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
84345-
data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84346-
data-x="embedder-policy-report-only-reporting-endpoint">report-only reporting endpoint</span>
84347-
to <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
84371+
data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84372+
data-x="embedder-policy-report-only-reporting-endpoint">endpoint</span> to
84373+
<var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8434884374
</ol>
8434984375
</li>
8435084376

@@ -84367,19 +84393,19 @@ interface <dfn interface>BarProp</dfn> {
8436784393
data-x="policy-container-embedder-policy">embedder policy</span>.</p></li>
8436884394

8436984395
<li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84370-
value</span> is "<code data-x="coep-require-corp">require-corp</code>" and
84371-
<var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84372-
data-x="coep-unsafe-none">unsafe-none</code>", then <span>queue a cross-origin embedder policy
84373-
inheritance violation</span> with <var>response</var>, "<code data-x="">navigation</code>",
84374-
<var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-reporting-endpoint">report
84375-
only reporting endpoint</span>, "<code data-x="">reporting</code>", and <var>target</var>'s <span
84396+
value</span> is <span>compatible with cross-origin isolation</span> and
84397+
<var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is not, then
84398+
<span>queue a cross-origin embedder policy inheritance violation</span> with <var>response</var>,
84399+
"<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
84400+
data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
84401+
"<code data-x="">reporting</code>", and <var>target</var>'s <span
8437684402
data-x="bc-container-document">container document</span>'s <span>relevant settings
8437784403
object</span>.</p></li>
8437884404

84379-
<li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84380-
data-x="coep-unsafe-none">unsafe-none</code>" or <var>responsePolicy</var>'s <span
84381-
data-x="embedder-policy-value">value</span> is "<code
84382-
data-x="coep-require-corp">require-corp</code>", then return true.</p></li>
84405+
<li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84406+
<span>compatible with cross-origin isolation</span> or <var>responsePolicy</var>'s <span
84407+
data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84408+
isolation</span>, then return true.</p></li>
8438384409

8438484410
<li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8438584411
<var>response</var>, "<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
@@ -84407,18 +84433,17 @@ interface <dfn interface>BarProp</dfn> {
8440784433
data-x="policy-container-embedder-policy">embedder policy</span>.
8440884434

8440984435
<li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84410-
value</span> is "<code data-x="coep-require-corp">require-corp</code>" and <var>policy</var>'s
84411-
<span data-x="embedder-policy-value">value</span> is "<code
84412-
data-x="coep-unsafe-none">unsafe-none</code>", then <span>queue a cross-origin embedder policy
84413-
inheritance violation</span> with <var>response</var>, "<code data-x="">worker
84436+
value</span> is <span>compatible with cross-origin isolation</span> and <var>policy</var>'s
84437+
<span data-x="embedder-policy-value">value</span> is not, then <span>queue a cross-origin
84438+
embedder policy inheritance violation</span> with <var>response</var>, "<code data-x="">worker
8441484439
initialization</code>", <var>owner's policy</var>'s <span
8441584440
data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
8441684441
"<code data-x="">reporting</code>", and <var>owner</var>.</p></li>
8441784442

84418-
<li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84419-
data-x="coep-unsafe-none">unsafe-none</code>" or <var>policy</var>'s <span
84420-
data-x="embedder-policy-value">value</span> is "<code
84421-
data-x="coep-require-corp">require-corp</code>", then return true.</p></li>
84443+
<li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84444+
<span>compatible with cross-origin isolation</span> or <var>policy</var>'s <span
84445+
data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84446+
isolation</span>, then return true.</p></li>
8442284447

8442384448
<li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8442484449
<var>response</var>, "<code data-x="">worker initialization</code>", <var>owner's policy</var>'s
@@ -102303,11 +102328,11 @@ interface <dfn interface>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope
102303102328

102304102329
<li>
102305102330
<p>If <var>worker global scope</var>'s <span
102306-
data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span> is "<code
102307-
data-x="coep-require-corp">require-corp</code>" and <var>is shared</var> is true, then set
102308-
<var>agent</var>'s <span>agent cluster</span>'s <span
102309-
data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span> to "<code
102310-
data-x="cross-origin-isolation-logical">logical</code>" or "<code
102331+
data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span>'s <span
102332+
data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
102333+
isolation</span> and <var>is shared</var> is true, then set <var>agent</var>'s <span>agent
102334+
cluster</span>'s <span data-x="agent-cluster-cross-origin-isolation">cross-origin isolation
102335+
mode</span> to "<code data-x="cross-origin-isolation-logical">logical</code>" or "<code
102311102336
data-x="cross-origin-isolation-concrete">concrete</code>". The one chosen is
102312102337
<span>implementation-defined</span>.</p>
102313102338

0 commit comments

Comments
 (0)