# X-Content-Type-Options

> A teszt azt nézi, hogy az oldal X-Content-Type-Options: nosniff fejlécet küld-e, amely megtiltja a böngészőnek a tartalomtípus kitalálását.

Ha egy szerver nem, vagy rosszul adja meg egy fájl típusát, a böngésző megpróbálja kitalálni a tartalmából (MIME-szippantás, „sniffing”). Ez kihasználható: egy szövegként kiszolgált, de HTML-t tartalmazó (például felhasználó által feltöltött) fájlt a böngésző HTML-ként is értelmezhet, és ezzel XSS-támadás válik lehetővé. Az `X-Content-Type-Options: nosniff` fejléc megtiltja ezt. 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ő:** az `X-Content-Type-Options` fejléc értéke (kis- és nagybetűtől függetlenül, a szóközöket levágva) `nosniff`. Ha a fejléc vesszővel elválasztott több értéket tartalmaz, az **első** számít.
- **Hiba:** nincs a fejléc, vagy az első értéke nem `nosniff`.

A teszt csak a főoldal válaszát nézi, a többi fájl (kép, szkript, stílus) fejlécét nem.

## Hogyan javítsd

Az MDN szerint a `nosniff` két dolgot csinál. Ha a kérés szkript vagy stílus, a böngésző blokkolja a választ, ha a típusa nem JavaScript-típus, illetve nem `text/css`. Minden más válasznál a megadott `Content-Type`-ot használja kitalálás helyett. A fejléc bekapcsolása előtt ezért győződj meg róla, hogy a szerver minden fájlt helyes `Content-Type`-pal ad ki, különben egy rosszul kiszolgált szkript vagy stílus nem fog betöltődni.

A riport kártyája az alábbi fejlécet adja. 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 X-Content-Type-Options "nosniff" always;
```

### Apache (.htaccess)

```apache title=".htaccess"
<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
</IfModule>
```

### Cloudflare

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

```text title="Cloudflare"
Set static: X-Content-Type-Options = nosniff
```

A Cloudflare dokumentációja szerint az **SSL/TLS → Edge Certificates** HSTS-beállításai között külön „No-Sniff Header” kapcsoló is van, amely ugyanezt a fejlécet küldi.

### 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( 'X-Content-Type-Options: nosniff' );
} );
```

## Hogyan ellenőrizd

Futtasd újra a riportot. Parancssorból:

```bash title="Terminál"
curl -sI https://example.com/ | grep -i x-content-type-options
```

A kimenet: `x-content-type-options: nosniff`. Nyisd meg az oldalt böngészőben is, és nézd meg a fejlesztői eszközök konzolját: ha egy szkript vagy stílus típusa nem stimmel, a böngésző itt hibaüzenetet ír.
