CentralCSP
Politiques

Cross-Origin-Opener-Policy

COOP isole votre fenêtre des openers et popups cross-origin, bloque les attaques inter-fenêtres et active une isolation cross-origin.

Dernière mise à jour:

Cross-Origin-Opener-Policy (COOP) permet à un document de contrôler s'il partage un groupe de contextes de navigation avec les fenêtres qui l'ouvrent ou qu'il ouvre. La définir coupe le lien window.opener vers les pages cross-origin, ce qui bloque une classe d'attaques inter-fenêtres et, associée à COEP, active l'état d'isolation cross-origin que des fonctionnalités comme SharedArrayBuffer exigent.

La configuration sûre tient en une seule ligne de header :

Cross-Origin-Opener-Policy: same-origin

Comment fonctionne COOP

Les fenêtres qui peuvent s'atteindre (un opener et la page qu'il a ouverte) partagent normalement un groupe de contextes de navigation, ce qui leur permet de toucher l'objet window de l'autre. Avec Cross-Origin-Opener-Policy: same-origin, le navigateur place votre page dans son propre groupe dès que l'autre partie est cross-origin, de sorte qu'un opener ou un popup cross-origin ne peut plus atteindre votre fenêtre, et vous ne pouvez plus atteindre la sienne. Vous la définissez avec le header de réponse.

Comment configurer COOP

ValeurStatutEffet
unsafe-none❌ RisquéLa valeur par défaut. Aucune isolation ; les fenêtres cross-origin conservent leur référence.
same-origin✅ BonIsolation complète des openers et des fenêtres ouvertes cross-origin. Requise pour crossOriginIsolated. Largement prise en charge.
same-origin-allow-popups✅ BonIsole des openers, mais conserve une référence vers les popups que votre page ouvre (OAuth, flux de paiement).
noopener-allow-popups🧪 ExpérimentalCoupe le lien opener même pour les popups same-origin. Dans Chrome et Safari ; pas Firefox.

Mode Report-Only

Reporting-Endpoints: coop-endpoint="https://<Endpoint-ID>.report.centralcsp.com"
Cross-Origin-Opener-Policy-Report-Only: same-origin; report-to="coop-endpoint"

Le header Report-Only évalue COOP et émet des rapports sans réellement isoler la fenêtre, ce qui vous permet de mesurer l'impact avant que rien ne change pour les utilisateurs. Le header Report-Only et le paramètre report-to sont tous deux limités à Chromium, traitez donc les rapports comme un échantillon Chromium de votre trafic.

Ce contre quoi il protège

Un groupe de contextes de navigation partagé est une surface d'attaque : un opener cross-origin peut scripter votre fenêtre, et le processus partagé est un vecteur pour les attaques par canal auxiliaire de type Spectre. COOP y met fin en isolant la fenêtre, et c'est l'une des deux moitiés de l'isolation cross-origin qui réactive en toute sécurité des fonctionnalités sensibles.

Configurations non sûres à éviter

unsafe-none est la valeur par défaut et n'offre aucune isolation. La laisser en place signifie que les openers cross-origin conservent une référence vers votre fenêtre.

Si vous avez seulement besoin de vous protéger des openers tout en ouvrant des popups de confiance, same-origin-allow-popups est le compromis pragmatique ; réservez unsafe-none aux pages qui dépendent réellement de l'accès aux fenêtres cross-origin.

Contournements et limites connus

COOP ne régit que la relation d'opener, pas l'embed. Contrôler qui peut mettre votre page dans une frame relève de frame-ancestors, et contrôler ce que vous embarquez relève de COEP. noopener-allow-popups n'a pas encore de support Firefox, ne comptez donc pas dessus en multi-navigateurs.

Risques

Activer same-origin peut casser des flux qui reposent sur window.opener, les popups OAuth, les fenêtres de paiement et certaines redirections SSO. Déployez-la d'abord en Report-Only et surveillez les rapports avant d'appliquer.

Recommandation

Définissez Cross-Origin-Opener-Policy: same-origin, la valeur que recommande la cheat sheet HTTP Headers de l'OWASP.

Cross-Origin-Opener-Policy: same-origin

Elle fournit une isolation complète et constitue la moitié de ce que crossOriginIsolated exige. Si elle casse un flux OAuth ou un popup de paiement, repliez-vous sur same-origin-allow-popups, qui garde accessibles les popups que vous ouvrez tout en vous isolant des openers cross-origin.

Reporting

Ajoutez un paramètre report-to="..." au header, déclarez cet endpoint dans Reporting-Endpoints, et le navigateur émet le rapport coop. CentralCSP collecte le flux coop.

Le reporting COOP est limité à Chromium : le paramètre report-to et le header Report-Only ne sont livrés que dans Chromium et nulle part ailleurs. Les valeurs de base de la politique sont standard et largement prises en charge.

Prise en charge par les navigateurs

Les valeurs de base sont largement prises en charge : same-origin et same-origin-allow-popups sont disponibles dans les versions actuelles de Chrome, Firefox et Safari. noopener-allow-popups est sur la voie de la standardisation mais limité à Chrome et Safari, sans support Firefox. Le header Report-Only et le paramètre report-to sont limités à Chromium.

FAQ

Que fait Cross-Origin-Opener-Policy ?

COOP permet à un document de contrôler s'il partage un groupe de contextes de navigation avec les fenêtres qu'il ouvre ou qui l'ouvrent. Définir same-origin coupe le lien window.opener vers les pages cross-origin, ce qui bloque une classe d'attaques inter-fenêtres et, associée à COEP, active l'état d'isolation cross-origin que des fonctionnalités comme SharedArrayBuffer exigent.

Quelle est la différence entre same-origin et same-origin-allow-popups ?

Les deux isolent votre fenêtre des openers cross-origin. same-origin donne une isolation complète et place votre page dans son propre groupe de contextes de navigation, ce que crossOriginIsolated exige. same-origin-allow-popups assouplit cela sur un point : il conserve une référence vers les popups que votre page ouvre, de sorte que les flux OAuth et de paiement continuent de fonctionner pendant que les openers cross-origin restent bloqués.

Voir aussi

Sources

On this page