Cross-Origin-Opener-Policy (COOP) et Cross-Origin-Embedder-Policy (COEP) sont deux en-têtes de réponse HTTP introduits par Chromium en 2020 et supportés aujourd'hui par tous les navigateurs majeurs (Chrome 83+, Firefox 79+, Safari 15.2+). COOP contrôle si une page partage son groupe de contexte de navigation avec les fenêtres qu'elle ouvre ou qui l'ont ouverte ; COEP contrôle si la page peut charger des sous-ressources cross-origin. La combinaison COOP: same-origin + COEP: require-corp ou credentialless active le mode "cross-origin isolated", requis pour utiliser SharedArrayBuffer, performance.measureUserAgentSpecificMemory() et les timers haute précision de performance.now(). Ils font partie du durcissement post-Spectre du navigateur, aux côtés de Cross-Origin-Resource-Policy (CORP).
Pourquoi COOP et COEP ont-ils été introduits ?
En janvier 2018, les vulnérabilités CPU side-channel Spectre et Meltdown (CVE-2017-5753, CVE-2017-5715, CVE-2017-5754) ont montré qu'un JavaScript malveillant peut lire la mémoire d'autres origines dans le même processus de rendu. Les navigateurs ont désactivé SharedArrayBuffer et abaissé la résolution de performance.now() de microsecondes à 100 µs. COOP et COEP permettent à un site de demander explicitement un contexte isolé par processus et propre côté cross-origin pour réactiver ces APIs.
Que fait Cross-Origin-Opener-Policy (COOP) ?
unsafe-none— par défaut.same-origin-allow-popups— vos popups conservent la référence ; les documents cross-origin qui veulent vous accéder sont isolés.same-origin— isolation totale.
Cross-Origin-Opener-Policy: same-originQue fait Cross-Origin-Embedder-Policy (COEP) ?
unsafe-none— par défaut.require-corp— chaque sous-ressource cross-origin doit consentir viaCross-Origin-Resource-Policy: cross-originou CORS.credentialless— depuis Chrome 96 (octobre 2021). Requêtes cross-origin sans cookies, la ressource n'a pas besoin de consentir.
Cross-Origin-Embedder-Policy: require-corpQu'est-ce que la cross-origin isolation ?
if ( self.crossOriginIsolated ) {
// SharedArrayBuffer et timers haute résolution disponibles
}Sans isolation, les navigateurs modernes bloquent new SharedArrayBuffer() et arrondissent performance.now() à 100 µs.
Quand a-t-on besoin de COOP et COEP sur WordPress ?
- Inutile sur un site de contenu, un blog ou un WooCommerce standard. Les activer peut casser les embeds (YouTube, Google Maps, Stripe Checkout, Facebook).
- Nécessaire si vous déployez du WebAssembly multi-thread (Photopea, Figma, FFmpeg.wasm), de l'édition vidéo navigateur, des jeux Emscripten ou des mesures de perf précises.
- COOP seul (
same-origin-allow-popups) est utile sur les pages de login et dashboards contre le tabnabbing.
Comment configurer COOP et COEP dans WordPress ?
Apache :
<IfModule mod_headers.c>
Header set Cross-Origin-Opener-Policy "same-origin"
Header set Cross-Origin-Embedder-Policy "require-corp"
Header set Cross-Origin-Resource-Policy "same-site"
</IfModule>Nginx :
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Resource-Policy "same-site" always;Qu'est-ce qui casse quand on active COEP: require-corp ?
- iframes YouTube et Vimeo (sauf en mode
credentialless). - Google Fonts depuis
fonts.gstatic.comsans CORS. - Avatars externes comme Gravatar.
- Pixels de tracking, Stripe.js, hCaptcha.
DevTools » Réseau » colonne "Bloqué" pour identifier les coupables. credentialless assouplit l'exigence.
Comment tester si mon site est cross-origin isolated ?
- Ouvrir le site dans Chrome.
- DevTools (F12) » Application » Frames » top » ligne "Cross-Origin Isolated: Yes".
- Ou taper
self.crossOriginIsolateddans la console.
Ce que vérifie InspectWP
InspectWP analyse chaque en-tête de réponse HTTP de la page crawlée et signale la présence et la valeur de Cross-Origin-Opener-Policy, Cross-Origin-Embedder-Policy et Cross-Origin-Resource-Policy dans la section Sécurité. L'absence est marquée comme avertissement, pas comme critique, car la plupart des sites de contenu n'ont pas besoin d'isolation complète.