# Cross-Origin-Opener-Policy (/fr/docs/web-security/policies/cross-origin-opener-policy)



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](/fr/docs/web-security/policies/cross-origin-embedder-policy), 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 :

```http
Cross-Origin-Opener-Policy: same-origin
```

## Comment fonctionne COOP [#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 [#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 [#mode-report-only]

```http
Reporting-Endpoints: coop-endpoint="https://<Endpoint-ID>.report.centralcsp.com"
```

```http
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 [#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 [#configurations-non-sûres-à-éviter]

<Callout type="warn">
  `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.
</Callout>

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 [#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`](/fr/docs/web-security/policies/content-security-policy/directives/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 [#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 [#recommandation]

Définissez `Cross-Origin-Opener-Policy: same-origin`, la valeur que recommande la
[cheat sheet HTTP Headers de l'OWASP](https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html).

```http
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 [#reporting]

Ajoutez un paramètre `report-to="..."` au header, déclarez cet endpoint dans
`Reporting-Endpoints`, et le navigateur émet le
[rapport coop](/fr/docs/web-security/reporting-api/reports/coop). CentralCSP collecte le
[flux coop](/fr/docs/platform/monitoring/coop).

<Callout type="info">
  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.
</Callout>

## Prise en charge par les navigateurs [#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 [#faq]

### Que fait Cross-Origin-Opener-Policy ? [#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 ? [#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 [#voir-aussi]

* [Cross-Origin-Embedder-Policy (COEP)](/fr/docs/web-security/policies/cross-origin-embedder-policy)
* [rapport coop](/fr/docs/web-security/reporting-api/reports/coop)
* [COOP et COEP expliqués](/fr/blog/coop-coep-cross-origin-isolation)
* [Header Reporting-Endpoints](/fr/docs/web-security/reporting-api/headers/reporting-endpoints)
* [Surveillance COOP dans CentralCSP](/fr/docs/platform/monitoring/coop)

## Sources [#sources]

* [MDN, Cross-Origin-Opener-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cross-Origin-Opener-Policy)
* [web.dev, COOP and COEP](https://web.dev/articles/coop-coep)
* [OWASP HTTP Headers cheat sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Headers_Cheat_Sheet.html)
* [HTML Living Standard](https://html.spec.whatwg.org/multipage/browsers.html)
