# Nincs kiírt szoftververzió

> A teszt azt nézi, elárulja-e a Server vagy az X-Powered-By fejléc a szoftver pontos verzióját; ha igen, kapcsold ki a kiírását.

A webszerver és a PHP alapból közli a válaszfejlécben, mi fut az oldal mögött, sokszor a pontos verzióval együtt: `nginx/1.24.0`, `Apache/2.4.58`, `PHP/8.3.6`. Az MDN a `Server` fejlécről azt írja, hogy a finom részletességű szoftverinformáció megkönnyítheti az ismert sebezhetőségek felderítését. Egy támadó a verzióból azonnal látja, melyik ismert hibával próbálkozzon.

A verzió elrejtése nem pótolja a frissítést, de kivesz a kezéből egy könnyű támpontot.

## Hogyan mérjük

A riport letölti a kezdőoldalt (legfeljebb 5 átirányítást követ), és két fejlécet vizsgál meg ebben a sorrendben: `Server`, majd `X-Powered-By`. A teszt kétállapotú.

| Eredmény | Mikor |
|---|---|
| Hiba | valamelyik fejléc értékében van `szám.szám` alakú szövegrész (például `1.24`, `2.4`, `8.3`) |
| Megfelelő | egyik fejlécben sincs ilyen, vagy a fejléc nincs a válaszban |

Példák a kód szerint:

- Hiba: `nginx/1.24.0`, `Apache/2.4.58 (Ubuntu)`, `PHP/8.3.6`.
- Megfelelő: `nginx`, `Apache`, `cloudflare`, `PHP`, és az `Apache/2` is, mert ebben nincs pont a számok közt.

Amit a teszt nem csinál:

- Csak ezt a két fejlécet nézi. A HTML-ben lévő egyéb jelzéseket (például generátor-meta tag, nyilvános fájlok) nem.
- Csak a kezdőoldal válaszát vizsgálja.
- Az első találatnál megáll, és csak azt az egy fejlécet jelzi.

> **Megjegyzés**
>
> Ha elrejted a PHP verzióját az `X-Powered-By` fejlécből, a [Támogatott PHP-verzió](https://hub.hellowp.io/hu/report/biztonsag/tamogatott-php-verzio/) teszt nem tud mérni (a riport ezt a fejlécből, illetve a `Server` fejlécből olvassa ki), ezért az kimarad a pontszámból. Ettől még a PHP-t frissen kell tartani.

## Hogyan javítsd

A javítás attól függ, melyik fejléc bukott. A riport kártyája is ezt választja szét.

### Server fejléc

#### nginx

Az nginx `http` blokkjába:

```nginx title="nginx"
server_tokens off;
```

Az nginx dokumentációja szerint ez kikapcsolja a verzió kiírását a hibaoldalakon és a `Server` fejlécben. A fejléc ettől még `Server: nginx` marad.

#### Apache

Az Apache fő konfigurációjába (`.htaccess`-ben nem működik):

```apache title="httpd.conf"
ServerTokens Prod
```

Az Apache dokumentációja szerint ekkor a szerver csak ennyit küld: `Server: Apache`. Ha LiteSpeed fut az Apache helyett: az Enterprise változat az Apache konfigurációját olvassa, az OpenLiteSpeed nem, ott a WebAdmin felületen állítsd be, vagy kérd a tárhelytől.

### X-Powered-By fejléc

#### PHP (php.ini)

A `php.ini` fájlba (vagy kérd a tárhelytől):

```ini title="php.ini"
expose_php = Off
```

A php.net szerint ez a beállítás dönt arról, hogy a PHP közli-e a verzióját a HTTP-fejlécben (például `X-Powered-By: PHP/5.3.7`). Az érték csak a `php.ini` fájlban állítható.

#### nginx

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

```nginx title="nginx"
fastcgi_hide_header X-Powered-By;
```

`proxy_pass` mögött `proxy_hide_header X-Powered-By;` kell.

#### Apache (.htaccess)

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

#### Cloudflare

Cloudflare: Rules, Overview, Create rule, Response Header Transform Rule, művelet: válaszfejléc eltávolítása.

```text title="Cloudflare"
Remove: X-Powered-By
```

Újraindítás vagy konfigurációbetöltés után a változás érvényesül (nginx: `nginx -t`, majd reload; a PHP-nél a PHP-FPM újraindítása kell).

## Hogyan ellenőrizd

Futtasd újra a riportot. Parancssorban is megnézheted:

```bash title="Terminál"
curl -sI "https://pelda.hu/?v=1" | grep -iE '^(server|x-powered-by):'
```

A jó kimenetben nincs `szám.szám` a fejlécekben, például `server: nginx`, vagy a sor hiányzik.
