# Nincs elavult fejléc

> A teszt azt nézi, küld-e az oldal X-XSS-Protection fejlécet; ha igen, töröld a szerver- vagy a CDN-beállításból.

Egyes válaszfejlécek egykor védelmet adtak, ma viszont már nem használja őket a böngésző, vagy kifejezetten árt velük. A teszt az `X-XSS-Protection` fejlécet keresi. Ezt a régi böngészők beépített XSS-szűrője olvasta; a MDN jelölése szerint elavult, nem szabványos, és bizonyos esetekben maga is XSS-sebezhetőséget hozhat létre egy egyébként biztonságos oldalon.

Ha az oldal küldi ezt a fejlécet, a teszt hibát jelez. A javítás egyszerű: töröld a fejlécet, semmi nem függ tőle.

## Hogyan mérjük

A riport letölti a kezdőoldalt (legfeljebb 5 átirányítást követ), és megnézi a végső válasz fejléceit. A teszt kétállapotú, nincs köztes figyelmeztetés.

| Eredmény | Mikor |
|---|---|
| Megfelelő | a válaszban nincs `X-XSS-Protection` fejléc |
| Hiba | a válaszban van `X-XSS-Protection` fejléc, bármilyen értékkel |

Amit a teszt nem csinál:

- Csak ezt az egy fejlécnevet keresi, más elavult fejlécet nem.
- Csak a kezdőoldal válaszát nézi, az aloldalakét nem.
- Az értéket nem vizsgálja: az `X-XSS-Protection: 0` is hibának számít.

> **Megjegyzés**
>
> Az OWASP HTTP Headers Cheat Sheet azt javasolja, hogy ezt a fejlécet vagy ne küldd, vagy kapcsold ki vele (`X-XSS-Protection: 0`). A riport szigorúbb: a `0` érték is hibát ad, mert a fejlécnek nem kell ott lennie. A leírás a riport működését követi.

## Hogyan javítsd

1. Keresd meg, melyik réteg küldi a fejlécet: a webszerver beállítása, egy proxy vagy CDN, esetleg maga az alkalmazás. Ha a szerver konfigurációjában `add_header` vagy `Header set` sorban szerepel, elég törölni azt a sort.
2. Ha nem a te kezedben lévő réteg adja, töröld a fejlécet onnan, ahol a választ továbbítod (lent a platformonkénti változatok).
3. A tényleges védelmet a `Content-Security-Policy` adja; erről a [Content-Security-Policy](https://hub.hellowp.io/hu/report/biztonsag/content-security-policy/) oldalon olvashatsz.

### nginx

A `location ~ \.php$` blokkba, a `fastcgi_pass` sor mellé:

```nginx title="nginx"
fastcgi_hide_header X-XSS-Protection;
```

A `fastcgi_hide_header` a FastCGI-kiszolgálótól (PHP-FPM) érkező fejlécet rejti el. Ha az nginx `proxy_pass` mögött továbbít, `proxy_hide_header X-XSS-Protection;` kell. Ha a fejlécet magában a konfigurációban egy `add_header` sor küldi, azt a sort töröld.

### Apache (.htaccess)

A webroot `.htaccess` fájljába:

```apache title=".htaccess"
<IfModule mod_headers.c>
    Header unset X-XSS-Protection
    Header always unset X-XSS-Protection
</IfModule>
```

A `Header unset` a sikeres válaszokról, a `Header always unset` a hibaválaszokról is leveszi a fejlécet (a `mod_headers` az `onsuccess` és az `always` táblát külön kezeli). Az `<IfModule>` burok miatt a sor akkor sem okoz 500-as hibát, ha a modul nincs betöltve.

### Cloudflare

Cloudflare: Rules, Overview, Create rule, Response Header Transform Rule. A szabály műveletének a válaszfejléc eltávolítását válaszd, a fejléc neve `X-XSS-Protection`:

```text title="Cloudflare"
Remove: X-XSS-Protection
```

## Hogyan ellenőrizd

Futtasd újra a riportot, a teszt zöldre vált, ha a fejléc eltűnt. Parancssorban is megnézheted (a cache elkerülése végett tegyél az URL-re egyedi paramétert):

```bash title="Terminál"
curl -sI "https://pelda.hu/?v=1" | grep -i x-xss-protection
```

Ha a parancs nem ír ki semmit, a fejléc nincs a válaszban.
