# Cross-Origin-Opener-Policy

> A teszt azt nézi, hogy az oldal küld-e Cross-Origin-Opener-Policy fejlécet, amely elválasztja az oldalt a más eredetű felugró ablakoktól.

Amikor egy oldal új ablakot nyit (`window.open()` vagy `target="_blank"` link), a két ablak alapból egy közös böngészési környezeti csoportban (browsing context group) lehet, és az egyik a másikra hivatkozhat. A `Cross-Origin-Opener-Policy` (COOP) fejléc ezt szabályozza: elválaszthatja az oldaladat a más eredetű ablakoktól, így azok nem férnek hozzá az ablakodhoz. A riportban a teszt súlyossága alacsony.

## Hogyan mérjük

A riport a főoldal válaszfejlécét nézi (átirányítások követése után a végső válaszét).

- **Megfelelő:** van `Cross-Origin-Opener-Policy` fejléc nem üres értékkel.
- **Hiba:** nincs ilyen fejléc.

A teszt csak a jelenlétet ellenőrzi, az értéket nem: az `unsafe-none` érték is megfelel, pedig az MDN szerint ez az alapértelmezés, vagyis ugyanazt jelenti, mint a fejléc hiánya.

## Hogyan javítsd

Az MDN szerint a fejléc értékei:

- `unsafe-none`: az alapértelmezés, az oldal bármelyik másik dokumentummal megoszthatja a környezeti csoportját,
- `same-origin-allow-popups`: az oldal elkülönül a más eredetű dokumentumoktól, de megtarthatja a hivatkozást azokra a felugró ablakokra, amelyek maguk `unsafe-none` értéket használnak,
- `same-origin`: csak azonos eredetű, szintén COOP-t használó dokumentumokkal oszt környezeti csoportot,
- `noopener-allow-popups`: az új dokumentumok még az azonos eredetű nyitótól is elkülönített csoportba kerülnek.

A riport kártyája a `same-origin-allow-popups` értéket adja. Ennek oka, hogy az MDN szerint pont ezt találták ki arra az esetre, ha az oldal megbízható harmadik fél szolgáltatását nyitja meg felugró ablakban, például bejelentkezéshez (OAuth) vagy fizetéshez. A szigorúbb `same-origin` az ilyen felugrókat elválasztja az oldaltól, így azok elveszíthetik a kapcsolatot a nyitó oldallal; ezért ne ezt válaszd, ha az oldalad ilyen szolgáltatást használ. A fejléc bekapcsolása után mindenképp próbáld ki a bejelentkezést és a fizetést.

A HTML-szabvány feldolgozási modellje szerint a böngésző a COOP-fejlécet nem biztonságos környezetben nem veszi figyelembe, ezért az oldalnak https-en kell működnie.

Az alábbi kódok a fejlécet egyedül állítják be; ha a riport több hiányzó fejlécet jelez, ugyanabba a blokkba kerülhet mindegyik.

### nginx

Az nginx `server` blokkjába. Ha egy `location` blokkban is van `add_header`, oda is be kell írni, mert az nginx csak akkor örökli a fejlécet, ha az adott szinten nincs `add_header`.

```nginx title="nginx"
add_header Cross-Origin-Opener-Policy "same-origin-allow-popups" always;
```

### Apache (.htaccess)

```apache title=".htaccess"
<IfModule mod_headers.c>
    Header always set Cross-Origin-Opener-Policy "same-origin-allow-popups"
</IfModule>
```

### Cloudflare

**Rules → Overview → Create rule → Response Header Transform Rule**:

```text title="Cloudflare"
Set static: Cross-Origin-Opener-Policy = same-origin-allow-popups
```

### WordPress

Új fájlba: `wp-content/mu-plugins/biztonsagi-fejlecek.php` (Bedrockon: `web/app/mu-plugins/biztonsagi-fejlecek.php`):

```php title="biztonsagi-fejlecek.php"
<?php
add_action( 'send_headers', function () {
    header( 'Cross-Origin-Opener-Policy: same-origin-allow-popups' );
} );
```

## Hogyan ellenőrizd

Futtasd újra a riportot. Parancssorból:

```bash title="Terminál"
curl -sI https://example.com/ | grep -i cross-origin-opener-policy
```

Böngészőben próbáld ki a felugró ablakot használó folyamatokat (bejelentkezés külső fiókkal, fizetés), hogy továbbra is működnek-e.
