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-originComment 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
| Valeur | Statut | Effet |
|---|---|---|
unsafe-none | ❌ Risqué | La valeur par défaut. Aucune isolation ; les fenêtres cross-origin conservent leur référence. |
same-origin | ✅ Bon | Isolation complète des openers et des fenêtres ouvertes cross-origin. Requise pour crossOriginIsolated. Largement prise en charge. |
same-origin-allow-popups | ✅ Bon | Isole des openers, mais conserve une référence vers les popups que votre page ouvre (OAuth, flux de paiement). |
noopener-allow-popups | 🧪 Expérimental | Coupe 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-originElle 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
- Cross-Origin-Embedder-Policy (COEP)
- rapport coop
- COOP et COEP expliqués
- Header Reporting-Endpoints
- Surveillance COOP dans CentralCSP
Sources
require-sri-for
La directive CSP require-sri-for devait imposer Subresource Integrity aux scripts et aux styles. Utilisez plutôt le header Integrity-Policy.
Cross-Origin-Embedder-Policy
COEP exige que chaque ressource cross-origin donne son accord avant son chargement par le document, et avec COOP active une isolation cross-origin.