Chrome nettleser, Nyheter

Anonymous iframe origin trial: Easily embed iframes in COEP environments

Why we need COEP

Some web APIs increase the risk of side-channel attacks such as
Spectre. To
mitigate that risk, browsers offer an opt-in-based isolated environment called
cross-origin isolation, which, among other things,
requires deploying COEP. This allows websites to use privileged features
including
SharedArrayBuffer,
performance.measureUserAgentSpecificMemory(),
and
high-precision timers with better resolution.

To enable cross-origin isolation, websites must send the following two HTTP
headers:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

COEP:credentialless can also be used as an alternative to require-corp.

Challenges with enabling COEP

While cross-origin isolation brings webpages better security and the ability to
enable powerful features, deploying COEP can be
difficult. One of the biggest
challenges is that all cross-origin iframes must also deploy COEP and CORP.
Iframes without those headers will not be loaded by the browser.

The iframes are usually served by a third party for whom it may not be easy to
deploy COEP.

Anonymous iframe to the rescue

That’s where anonymous iframe comes in. By adding the anonymous attribute to
the <iframe> element, the iframe is loaded from a different, ephemeral storage
partition and it isn’t subject to COEP restrictions anymore.

Example:

<iframe anonymous src="https://example.com">

Iframe is created in a new ephemeral context and doesn’t have access to any of
the cookies associated with the top level website. It starts from an empty
cookie jar. Likewise, storage APIs such as
LocalStorage,
CacheStorage,
IndexedDB, and so
on, are loading and storing data in the new ephemeral partition. The partition
is scoped to the current top-level document and origin of the iframe. Storage
will be cleared once the top-level document is unloaded.

Anonymous iframes are not subject to COEP embedding rules. This is still
secure, because they are loaded from a new empty context everytime. They will be
loaded without their data being personalized. They contain only public data,
which is not valuable to an attacker.

Demo

You can check out an anonymous iframe at:
https://anonymous-iframe.glitch.me/

Register for an origin trial

To ensure that Anonymous iframes are helping developers adopt cross origin
isolation, we are making them available in Chrome from version 106 to 108 as an
origin trial.

Register for the origin trial to enable your website to use Anonymous
iframes:

  1. Request a token
    for your origin.
  2. Use the token in one of the following ways:
    • In your HTML:
      <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • In your Javascript:
        const meta = document.createElement('meta');
      meta.httpEquiv = 'Origin-Trial';
      meta.content = 'TOKEN_GOES_HERE';
      document.head.append(meta);
    • In the HTTP headers:
      Origin-Trial: TOKEN_GOES_HERE
  3. Add an anonymous iframe to your page:
    <iframe anonymous src="https://example.com">

If you have any feedback on this feature, file an issue in the GitHub
repository
.

Third party origin trial

The origin trial is also available to third party scripts. It means it can be
enabled by scripts embedded on the page.

Leran more about how to
register for a third-party origin trial.

FAQ

Will this feature be adopted by other browsers?

Are iframes nested inside <iframe anonymous> anonymous?

Yes. It is inherited. Once an iframe is anonymous, that applies to all iframes
in the whole subtree even without an anonymous attribute.

Are pop-ups created from <iframe anonymous> anonymous too?

Pop-ups are opened as if noopener was set. They are created from a new
regular top-level context and are not anonymous. They can’t communicate with the
anonymous iframe.

Resources

This post is also available in: English

author-avatar

About Aksel Lian

En selvstendig full stack webutvikler med en bred variasjon av kunnskaper herunder SEO, CMS, Webfotografi, Webutvikling inkl. kodespråk..