Phase d'évaluation des iFrames anonymes: intégrer facilement des iFrames dans des environnements COEP

Arthur Sonzogni
Arthur Sonzogni

Les développeurs qui utilisent COEP peuvent désormais intégrer des iFrames tiers qui n'utilisent pas COEP eux-mêmes.

Pourquoi nous avons besoin du COEP

Certaines API Web augmentent le risque d'attaque par canal auxiliaire, comme Spectre. Pour atténuer ce risque, les navigateurs proposent un environnement isolé facultatif appelé isolation multi-origine, qui nécessite, entre autres, le déploiement de COEP. Cela permet aux sites Web d'utiliser des fonctionnalités privilégiées, y compris SharedArrayBuffer, performance.measureUserAgentSpecificMemory(), et des minuteurs de haute précision avec une meilleure résolution.

Pour activer l'isolation multi-origine, les sites Web doivent envoyer les deux en-têtes HTTP suivants:

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

Défis liés à l'activation du COEP

Bien que l'isolation multi-origine renforce la sécurité des pages Web et permet d'activer des fonctionnalités puissantes, le déploiement du COEP peut s'avérer difficile. L'un des plus grands défis est que tous les iFrames multi-origines doivent également déployer COEP et CORP. Les iFrames sans ces en-têtes ne seront pas chargés par le navigateur.

Les iFrames sont généralement diffusés par un tiers pour lequel il peut être difficile de déployer COEP.

Solution iFrame anonyme

C'est là qu'un iFrame anonyme entre en jeu. En ajoutant l'attribut anonymous à l'élément <iframe>, l'iFrame est chargé à partir d'une autre partition de stockage éphémère et n'est plus soumis aux restrictions COEP.

Exemple :

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

L'iFrame est créé dans un nouveau contexte éphémère et n'a accès à aucun des cookies associés au site Web de premier niveau. Il commence à partir d'un cookie jar vide. De même, les API de stockage telles que LocalStorage, CacheStorage, IndexedDB, etc. chargent et stockent des données dans la nouvelle partition éphémère. La partition est limitée au document de premier niveau actuel et à l'origine de l'iFrame. L'espace de stockage sera effacé une fois le document de premier niveau déchargé.

Les iFrame anonymes ne sont pas soumis aux règles d'intégration COEP. Cette approche reste sécurisée, car elles sont chargées à partir d'un nouveau contexte vide à chaque fois. Elles seront chargées sans que leurs données ne soient personnalisées. Ils ne contiennent que des données publiques, qui ne sont pas précieuses pour un attaquant.

Démonstration

Vous pouvez découvrir un iFrame anonyme à l'adresse suivante : https://anonymous-iframe.glitch.me/

S'inscrire à une phase d'évaluation

Pour nous assurer que les iFrame anonymes aident les développeurs à adopter l'isolation multi-origine, nous les mettons à disposition dans Chrome de la version 106 à la version 108 en phase d'évaluation.

Inscrivez-vous à la phase d'évaluation pour permettre à votre site Web d'utiliser des cadres iFrame anonymes:

  1. Demandez un jeton pour votre origine.
  2. Utilisez le jeton de l'une des manières suivantes :
    • Dans votre code HTML : html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • Dans votre code JavaScript : js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
    • Dans les en-têtes HTTP : text Origin-Trial: TOKEN_GOES_HERE
  3. Ajoutez un iFrame anonyme à votre page : html <iframe anonymous src="https://example.com">

Si vous avez des commentaires sur cette fonctionnalité, signalez votre problème dans le dépôt GitHub.

Phase d'évaluation tierce

La phase d'évaluation est également disponible pour les scripts tiers. Cela signifie qu'elle peut être activée par des scripts intégrés à la page.

Leran en savoir plus sur l'inscription à une phase d'évaluation tierce.

Questions fréquentes

Cette fonctionnalité sera-t-elle adoptée par d'autres navigateurs ?

Les iFrames imbriqués dans <iframe anonymous> sont-ils anonymes ?

Oui. Elle est héritée. Une fois qu'un iFrame est anonyme, cela s'applique à tous les iFrames de la sous-arborescence entière, même sans attribut anonymous.

Les pop-ups créés à partir de <iframe anonymous> sont-ils également anonymes ?

Les pop-ups s'ouvrent comme si noopener était défini. Ils sont créés à partir d'un nouveau contexte standard de premier niveau et ne sont pas anonymes. Ils ne peuvent pas communiquer avec l'iFrame anonyme.

Ressources