Skip to content

Commit c449a3d

Browse files
ArthurSonzognimfreed7
authored andcommitted
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 whatwg#6637.
1 parent f8e1d8e commit c449a3d

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
@@ -79989,9 +79989,8 @@ console.assert(iframeWindow.frameElement === null);
7998979989
data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
7999079990
data-x="coop-same-origin">same-origin</span></code>`, and</p></li>
7999179991

79992-
<li><p>every <span>Document</span> has `<code
79993-
data-x=""><span>Cross-Origin-Embedder-Policy</span>: <span
79994-
data-x="coep-require-corp">require-corp</span></code>`.</p></li>
79992+
<li><p>every <span>Document</span> has a `<code>Cross-Origin-Embedder-Policy</code>` header
79993+
whose value is <span>compatible with cross-origin isolation</span>.</p></li>
7999579994
</ul>
7999679995

7999779996
<p>On some platforms, it is difficult to provide the security properties required to grant safe
@@ -83048,8 +83047,9 @@ interface <dfn interface>BarProp</dfn> {
8304883047
data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</code>` header, but results
8304983048
from a combination of setting both `<code data-x=""><span
8305083049
data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
83051-
data-x="coop-same-origin">same-origin</span></code>` and `<code
83052-
data-x=""><span>Cross-Origin-Embedder-Policy</span>: require-corp</code>` together.</p>
83050+
data-x="coop-same-origin">same-origin</span></code>` and a
83051+
`<code>Cross-Origin-Embedder-Policy</code>` header whose value is <span>compatible with
83052+
cross-origin isolation</span> together.<p>
8305383053
</dd>
8305483054
</dl>
8305583055

@@ -83138,8 +83138,8 @@ interface <dfn interface>BarProp</dfn> {
8313883138
policy">obtaining a cross-origin embedder policy</span> from <var>response</var> and
8313983139
<var>reservedEnvironment</var>.</p></li>
8314083140

83141-
<li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83142-
data-x="coep-require-corp">require-corp</code>", then set <var>policy</var>'s <span
83141+
<li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83142+
<span>compatible with cross-origin isolation</span>, then set <var>policy</var>'s <span
8314383143
data-x="coop-struct-value">value</span> to "<code
8314483144
data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p></li>
8314583145

@@ -83180,10 +83180,10 @@ interface <dfn interface>BarProp</dfn> {
8318083180
<var>reservedEnvironment</var>.</p></li>
8318183181

8318283182
<li>
83183-
<p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83184-
data-x="coep-require-corp">require-corp</code>" or <var>coep</var>'s <span
83185-
data-x="embedder-policy-report-only-value">report-only value</span> is "<code
83186-
data-x="coep-require-corp">require-corp</code>", then set <var>policy</var>'s <span
83183+
<p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83184+
<span>compatible with cross-origin isolation</span> or <var>coep</var>'s <span
83185+
data-x="embedder-policy-report-only-value">report-only value</span> is <span>compatible with
83186+
cross-origin isolation</span>, then set <var>policy</var>'s <span
8318783187
data-x="coop-struct-report-only-value">report-only value</span> to "<code
8318883188
data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p>
8318983189

@@ -84196,8 +84196,8 @@ interface <dfn interface>BarProp</dfn> {
8419684196

8419784197
<h3 id="coep">Cross-origin embedder policies</h3>
8419884198

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

8420284202
<dl>
8420384203
<dt>"<dfn data-x="coep-unsafe-none" export for="embedder policy value"><code
@@ -84211,8 +84211,34 @@ interface <dfn interface>BarProp</dfn> {
8421184211
<dd><p>When this value is used, fetching cross-origin resources requires the server's
8421284212
explicit permission through the <span>CORS protocol</span> or the
8421384213
`<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
84214+
84215+
<dt>"<dfn data-x="coep-credentialless" export for="embedder policy value"><code
84216+
data-x="">credentialless</code></dfn>"</dt>
84217+
<dd><p>When this value is used, fetching cross-origin no-CORS resources omits credentials. In
84218+
exchange, an explicit `<code>Cross-Origin-Resource-Policy</code>` header is not required. Other
84219+
requests sent with credentials require the server's explicit permission through the <span>CORS
84220+
protocol</span> or the `<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
8421484221
</dl>
8421584222

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

8421884244
<ul>
@@ -84317,17 +84343,17 @@ interface <dfn interface>BarProp</dfn> {
8431784343
<var>response</var>'s <span data-x="concept-response-header-list">header list</span>.</p></li>
8431884344

8431984345
<li>
84320-
<p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84321-
data-x="">require-corp</code>":</p>
84346+
<p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84347+
cross-origin isolation</span>:</p>
8432284348

8432384349
<ol>
84324-
<li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to "<code
84325-
data-x="coep-require-corp">require-corp</code>".</p></li>.
84350+
<li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to
84351+
<var>parsedItem</var>[0].</p></li>
8432684352

8432784353
<li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
8432884354
data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84329-
data-x="embedder-policy-reporting-endpoint">endpoint</span> to <var>parsedItem</var>[1]["<code
84330-
data-x="coep-report-to">report-to</code>"].</p></li>
84355+
data-x="embedder-policy-reporting-endpoint">endpoint</span> to
84356+
<var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8433184357
</ol>
8433284358
</li>
8433384359

@@ -84337,17 +84363,17 @@ interface <dfn interface>BarProp</dfn> {
8433784363
list</span>.</p></li>
8433884364

8433984365
<li>
84340-
<p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84341-
data-x="">require-corp</code>":</p>
84366+
<p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84367+
cross-origin isolation</span>:</p>
8434284368

8434384369
<ol>
84344-
<li><p>Set <var>policy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84345-
value</span> to "<code data-x="coep-require-corp">require-corp</code>".</p></li>.
84370+
<li><p>Set <var>policy</var>'s <span
84371+
data-x="embedder-policy-report-only-value">value</span> to <var>parsedItem</var>[0].</p></li>
8434684372

8434784373
<li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
84348-
data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84349-
data-x="embedder-policy-report-only-reporting-endpoint">report-only reporting endpoint</span>
84350-
to <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
84374+
data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84375+
data-x="embedder-policy-report-only-reporting-endpoint">endpoint</span> to
84376+
<var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8435184377
</ol>
8435284378
</li>
8435384379

@@ -84370,19 +84396,19 @@ interface <dfn interface>BarProp</dfn> {
8437084396
data-x="policy-container-embedder-policy">embedder policy</span>.</p></li>
8437184397

8437284398
<li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84373-
value</span> is "<code data-x="coep-require-corp">require-corp</code>" and
84374-
<var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84375-
data-x="coep-unsafe-none">unsafe-none</code>", then <span>queue a cross-origin embedder policy
84376-
inheritance violation</span> with <var>response</var>, "<code data-x="">navigation</code>",
84377-
<var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-reporting-endpoint">report
84378-
only reporting endpoint</span>, "<code data-x="">reporting</code>", and <var>target</var>'s <span
84399+
value</span> is <span>compatible with cross-origin isolation</span> and
84400+
<var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is not, then
84401+
<span>queue a cross-origin embedder policy inheritance violation</span> with <var>response</var>,
84402+
"<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
84403+
data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
84404+
"<code data-x="">reporting</code>", and <var>target</var>'s <span
8437984405
data-x="bc-container-document">container document</span>'s <span>relevant settings
8438084406
object</span>.</p></li>
8438184407

84382-
<li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84383-
data-x="coep-unsafe-none">unsafe-none</code>" or <var>responsePolicy</var>'s <span
84384-
data-x="embedder-policy-value">value</span> is "<code
84385-
data-x="coep-require-corp">require-corp</code>", then return true.</p></li>
84408+
<li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84409+
<span>compatible with cross-origin isolation</span> or <var>responsePolicy</var>'s <span
84410+
data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84411+
isolation</span>, then return true.</p></li>
8438684412

8438784413
<li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8438884414
<var>response</var>, "<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
@@ -84410,18 +84436,17 @@ interface <dfn interface>BarProp</dfn> {
8441084436
data-x="policy-container-embedder-policy">embedder policy</span>.
8441184437

8441284438
<li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84413-
value</span> is "<code data-x="coep-require-corp">require-corp</code>" and <var>policy</var>'s
84414-
<span data-x="embedder-policy-value">value</span> is "<code
84415-
data-x="coep-unsafe-none">unsafe-none</code>", then <span>queue a cross-origin embedder policy
84416-
inheritance violation</span> with <var>response</var>, "<code data-x="">worker
84439+
value</span> is <span>compatible with cross-origin isolation</span> and <var>policy</var>'s
84440+
<span data-x="embedder-policy-value">value</span> is not, then <span>queue a cross-origin
84441+
embedder policy inheritance violation</span> with <var>response</var>, "<code data-x="">worker
8441784442
initialization</code>", <var>owner's policy</var>'s <span
8441884443
data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
8441984444
"<code data-x="">reporting</code>", and <var>owner</var>.</p></li>
8442084445

84421-
<li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84422-
data-x="coep-unsafe-none">unsafe-none</code>" or <var>policy</var>'s <span
84423-
data-x="embedder-policy-value">value</span> is "<code
84424-
data-x="coep-require-corp">require-corp</code>", then return true.</p></li>
84446+
<li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84447+
<span>compatible with cross-origin isolation</span> or <var>policy</var>'s <span
84448+
data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84449+
isolation</span>, then return true.</p></li>
8442584450

8442684451
<li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8442784452
<var>response</var>, "<code data-x="">worker initialization</code>", <var>owner's policy</var>'s
@@ -102308,11 +102333,11 @@ interface <dfn interface>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope
102308102333

102309102334
<li>
102310102335
<p>If <var>worker global scope</var>'s <span
102311-
data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span> is "<code
102312-
data-x="coep-require-corp">require-corp</code>" and <var>is shared</var> is true, then set
102313-
<var>agent</var>'s <span>agent cluster</span>'s <span
102314-
data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span> to "<code
102315-
data-x="cross-origin-isolation-logical">logical</code>" or "<code
102336+
data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span>'s <span
102337+
data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
102338+
isolation</span> and <var>is shared</var> is true, then set <var>agent</var>'s <span>agent
102339+
cluster</span>'s <span data-x="agent-cluster-cross-origin-isolation">cross-origin isolation
102340+
mode</span> to "<code data-x="cross-origin-isolation-logical">logical</code>" or "<code
102316102341
data-x="cross-origin-isolation-concrete">concrete</code>". The one chosen is
102317102342
<span>implementation-defined</span>.</p>
102318102343

0 commit comments

Comments
 (0)