# Referrer-Policy

> A teszt azt nézi, hogy az oldal kifejezetten megadja-e, mennyit árulhat el a böngésző a látogatott címből; ha nem, állíts be Referrer-Policy fejlécet.

Amikor a látogató egy linkre kattint, vagy az oldal betölt egy külső képet vagy szkriptet, a böngésző alapból elküldheti annak a lapnak a címét (`Referer` fejléc), ahonnan a kérés indult. Ez a cím tartalmazhat útvonalat és keresési paramétereket, akár olyan adatot is, amit nem szeretnél kiadni egy külső félnek. A `Referrer-Policy` fejléc megmondja a böngészőnek, mennyit küldhet el. A riportban a teszt súlyossága alacsony.

## Hogyan mérjük

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

- **Megfelelő:** van `Referrer-Policy` válaszfejléc nem üres értékkel, **vagy** a HTML-ben van `<meta name="referrer" …>` tag.
- **Hiba:** egyik sincs.

A teszt csak azt nézi, hogy az oldal **kifejezetten megad** szabályt, az értéket nem értékeli. Tehát egy kevésbé védő érték (például `unsafe-url`, amely a teljes címet elküldi) is megfelel. A tesztet az sem befolyásolja, hogy az egyes linkeken van-e saját `referrerpolicy` attribútum.

Érdemes tudni: az MDN szerint a böngészők alapértelmezése szabály hiányában a `strict-origin-when-cross-origin`, vagyis a tényleges kockázat kicsi akkor is, ha a fejlécet nem állítod be. A teszt ettől függetlenül a kifejezett megadást kéri, mert így az oldal viselkedése nem függ a böngésző alapértelmezésétől.

## Hogyan javítsd

A riport kártyája a `strict-origin-when-cross-origin` értéket adja, amelyet a Mozilla is ajánl. Az MDN szerint ennél az értéknél:

- azonos eredetű kéréskor a böngésző az eredetet, az útvonalat és a lekérdezést is elküldi,
- másik eredet felé csak az eredetet (a domaint), és csak ha a biztonsági szint nem romlik (https → https),
- https oldalról http felé nem küld semmit.

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 Referrer-Policy "strict-origin-when-cross-origin" always;
```

### Apache (.htaccess)

```apache title=".htaccess"
<IfModule mod_headers.c>
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
```

### Cloudflare

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

```text title="Cloudflare"
Set static: Referrer-Policy = strict-origin-when-cross-origin
```

### 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( 'Referrer-Policy: strict-origin-when-cross-origin' );
} );
```

### HTML

Ha a válaszfejléchez nem férsz hozzá, az egész dokumentumra érvényes szabályt meta taggel is megadhatod; a riport ezt is elfogadja. A tag a lap `<head>` részébe kerül.

```html title="HTML"
<meta name="referrer" content="strict-origin-when-cross-origin">
```

## Hogyan ellenőrizd

Futtasd újra a riportot. Parancssorból:

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

Ha külső szolgáltatás (például fizetési átjáró vagy statisztika) a hivatkozó címtől függ, a beállítás után próbáld ki azokat is.
