Les ressources multi-origines diffusées par des tiers n'incluent souvent pas les en-têtes CORP adéquats. S'ils peuvent être demandés sans identifiants, vous pouvez désormais activer l'isolation multi-origine en les marquant comme tels.
Nous avons envoyé la nouvelle valeur COEP (Cross-Origin Embedder Policy)
credentialless
, qui permet au navigateur de charger des ressources multi-origines
n'utilisez pas CORP (Cross-Origin Resource Policy), en envoyant une requête sans
les identifiants, tels que les cookies. Cela aide les développeurs à adopter l'origine multi-origine
l'isolement plus
facilement.
Pourquoi l'isolation multi-origine est-elle nécessaire ?
Certaines API Web augmentent le risque d'attaques par canal auxiliaire, comme
Spectre : À
pour limiter ce risque, les navigateurs offrent un environnement isolé basé sur l'activation, appelé
cross-origin isolation (isolation multi-origine). Avec une origine croisée
dans un état isolé, la page Web peut utiliser des fonctionnalités privilégiées, y compris
SharedArrayBuffer
,
performance.measureUserAgentSpecificMemory()
et des minuteurs haute précision avec une meilleure résolution
tout en isolant l'origine des autres, sauf s'ils sont activés.
La page Web doit envoyer deux en-têtes HTTP pour permettre l'isolation multi-origine:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Avec un état isolé multi-origine, toutes les ressources multi-origines doivent être diffusées
avec CORS ou définissez un en-tête Cross-Origin-Resource-Policy
à charger.
Difficultés liées à l'activation de l'isolation multi-origine
L'isolation multi-origine renforce la sécurité des pages Web et leur permet activer des fonctionnalités puissantes, difficile. L'une des plus grandes est l'obligation d'activer CORS ou CORP pour tous les types ressources. Les ressources sans ces en-têtes ne seront pas chargées par le navigateur sur une page isolée multi-origine.
Ces ressources multi-origines sont généralement diffusées par des tiers pour lesquels elles peuvent il n'est pas facile d'ajouter les en-têtes nécessaires.
Mais que se passe-t-il si nous savons que la ressource est suffisamment sûre pour être chargée ? En fait, le seul les ressources menacées sont celles demandées avec des identifiants, potentiellement des informations sensibles que l'attaquant ne peut pas charger sur leur vous-même. Cela signifie que les ressources pouvant être demandées sans identifiants disponibles et peuvent être chargées en toute sécurité.
credentialless
à la rescousse
C'est là que COEP: credentialless
entre en jeu. credentialless
est une nouvelle valeur.
pour l'en-tête Cross-Origin-Embedder-Policy
. Semblable à require-corp
, il peut
activer l'isolation multi-origine, mais au lieu de nécessiter un CORP:cross-origin
pour les requêtes multi-origines "no-cors", elles sont envoyées sans problème
identifiants (par exemple, les cookies).
Vous pourrez activer l'isolation multi-origine en passant par les deux en-têtes suivants:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
Cela signifie que le serveur multi-origine demandé ne pourra pas répondre avec une une ressource sensible. Le demandeur peut toujours supposer que la réponse n'est traitée contient des informations accessibles au public.
Ceci est également aligné sur les exigences des navigateurs plan d'abandon progressif des cookies tiers.
Démo
Vous pouvez tester différentes options d'en-tête dans cette démonstration: https://cross-origin-isolation.glitch.me
Questions fréquentes
Puis-je envoyer une requête avec identifiants dans un environnement credentialless
?
Absolument, au prix d'un changement du mode de la requête pour exiger une vérification CORS
sur la réponse. Pour les balises HTML telles que <audio>
, <img>
, <link>
, <script>
,
et <video>
, il vous suffit d'ajouter crossorigin="use-credentials"
explicitement pour indiquer
au navigateur pour envoyer des requêtes authentifiées.
Par exemple, même si un document sur https://www.example.com
contient
en-tête Cross-Origin-Embedder-Policy: credentialless
, <img
src="https://images.example.com/avatar.png" crossorigin="use-credentials">
va
envoyer une requête avec identifiants.
Pour l'API fetch()
, vous pouvez utiliser request.mode = 'cors'
.
Si vous avez fourni COEP: credentialless
, en quoi COEP: require-corp
peut-il encore être utile pour mon site Web ?
COEP: require-corp
ne vous oblige pas à passer manuellement du mode de demande à
CORS si des cookies sont nécessaires pour certaines sous-ressources d'origines multiples
Puis-je également charger des iFrame multi-origines sans en-têtes spéciaux dans un environnement credentialless
?
Non. Le chargement d'iFrames multi-origines dans un environnement credentialless
nécessite toujours les mêmes conditions que require-corp
. Les documents iFrame doivent être diffusés avec deux en-têtes:
Cross-Origin-Embedder-Policy: credentialless
(ourequire-corp
)Cross-Origin-Resource-Policy: cross-origin
La bonne nouvelle, c'est qu'il existe une discussion en cours sur la possibilité de charger des iFrames multi-origines sans ces en-têtes en attribuant des iFrames crossorigin="anonymous"
.
Cela permettra de charger des iFrames multi-origines sans en-tête, mais sans
identifiants de connexion.
D'autres navigateurs utiliseront-ils cette fonctionnalité ?
- Problème de suivi dans Firefox
- Demande de position du Webkit: aucun signal
- W3C TAG Demande de position: En attente
À venir
Deux autres mises à jour sont prévues pour atténuer d'autres difficultés liées à multi-origines:
Personnes qui se sont inscrites à la phase d'évaluation de Chrome pour étendre la modification SharedArrayBuffer en raison de obstacles ci-dessus peuvent se demander quand il prendra fin. À l'origine, nous a annoncé qu'elle prendra fin dans Chrome 96, mais nous avons décidé de reportez-vous à Chrome 106.
Ressources
- Rendre votre site Web "isolé de plusieurs origines" avec COOP et COEP
- Pourquoi avez-vous besoin d'un "isolement multi-origine" pour profiter de fonctionnalités puissantes
- Guide pour activer l'isolation multi-origine
- Mises à jour SharedArrayBuffer dans Android 88 et Chrome 92 sur ordinateur
Photo de Martin Adams sur Désactiver