Cross-Origin-Opener-Policy (COOP)
Mieux isoler une page web des pages provenant d’autres origines lorsqu’elles sont ouvertes dans des fenêtres ou onglets séparés.
Comprendre Cross-Origin-Opener-Policy
Lorsqu’une page web ouvre une autre page dans une nouvelle fenêtre ou dans un nouvel onglet, les deux pages peuvent parfois conserver une forme de relation entre elles.
Cross-Origin-Opener-Policy, souvent abrégé en COOP, permet de demander au navigateur de mieux séparer les pages lorsqu’elles proviennent d’origines différentes.
L’objectif est de limiter certaines interactions entre des pages qui n’ont pas besoin de partager le même contexte de navigation.
Qu’est-ce qu’une origine ?
Dans le navigateur, une origine correspond principalement à la combinaison du protocole, du nom de domaine et du port.
Par exemple :
https://example.com
et :
https://autre-site.fr
appartiennent à deux origines différentes.
Le terme cross-origin signifie donc simplement : entre deux origines différentes.
Configurer COOP
Le serveur transmet la politique grâce à l’en-tête HTTP :
Cross-Origin-Opener-Policy: same-origin
Cette valeur demande au navigateur d’isoler davantage la page des documents provenant d’une autre origine.
En pratique, les pages appartenant à la même origine peuvent continuer à fonctionner ensemble, tandis que les pages provenant d’une autre origine sont davantage séparées.
Les principales valeurs
unsafe-none
N’impose pas d’isolation particulière. C’est le comportement le moins restrictif.
same-origin
Isole la page des documents provenant d’une autre origine. C’est la valeur adaptée lorsqu’une isolation forte est recherchée.
same-origin-allow-popups
Conserve une isolation importante, tout en permettant certains scénarios où la page doit ouvrir des fenêtres provenant d’autres origines.
Exemple concret
Imaginons que le site :
https://example.com
ouvre une fenêtre vers :
https://service-externe.fr
Avec une politique COOP adaptée, le navigateur peut séparer plus strictement les deux contextes de navigation, ce qui réduit certaines possibilités d’interaction entre les deux sites.
COOP, fenêtres externes et isolation cross-origin
Certains sites doivent ouvrir des services externes
L’ouverture d’une fenêtre externe n’est pas forcément anormale.
Certains sites utilisent ce fonctionnement pour des services comme :
- une authentification externe ;
- un système de paiement ;
- une connexion à un service tiers ;
- certaines interfaces ouvertes dans une fenêtre séparée.
Une politique trop restrictive peut donc perturber certaines de ces fonctionnalités.
Il faut choisir une politique correspondant réellement aux interactions nécessaires, plutôt que supprimer l’isolation par facilité.
COOP fait partie d’un ensemble de protections
COOP est souvent associé à deux autres en-têtes :
- Cross-Origin-Resource-Policy (CORP) , qui contrôle certains usages de ressources entre origines ;
- Cross-Origin-Embedder-Policy (COEP) , qui impose des règles aux ressources externes intégrées dans une page.
Ces mécanismes sont complémentaires : ils ne contrôlent pas exactement la même chose, mais peuvent être combinés pour renforcer l’isolation entre différentes origines.
Bonnes pratiques et limites
Bonnes pratiques
- Mettre en place une politique COOP adaptée au fonctionnement réel du site.
- Vérifier si le site a réellement besoin d’interagir avec des fenêtres provenant d’autres origines.
-
Utiliser
same-originlorsqu’une isolation forte est recherchée et que les interactions cross-origin ne sont pas nécessaires. -
Envisager
same-origin-allow-popupslorsque certains scénarios avec des fenêtres externes doivent rester fonctionnels. - Tester les systèmes d’authentification, de paiement et les autres services externes utilisant des fenêtres séparées.
- Réexaminer la politique lorsque le fonctionnement des services externes évolue.
Une politique stricte peut modifier le comportement du site
COOP agit directement sur la manière dont certaines fenêtres et certains documents sont regroupés par le navigateur.
Une modification de la politique peut donc avoir un effet sur les fonctionnalités reposant sur des fenêtres externes ou des interactions entre plusieurs pages.
Ce que COOP ne remplace pas
COOP améliore l’isolation entre certains contextes de navigation, mais il ne sécurise pas l’ensemble du site à lui seul.
Il ne remplace notamment pas :
- Content-Security-Policy (CSP) ;
- CORP et COEP lorsque ces mécanismes sont nécessaires ;
- HTTPS ;
- la sécurité du code ;
- les autres protections nécessaires au site.
COOP constitue donc une protection supplémentaire pour isoler les contextes de navigation et doit être configuré en fonction des interactions réellement nécessaires entre les pages.