# Süti: Secure

> A teszt azt nézi, kapnak-e Secure jelzőt a kezdőoldal sütijei; nélküle a süti titkosítatlan kapcsolaton is elmenne.

A `Secure` jelzővel ellátott sütit a böngésző csak `https:` kapcsolaton küldi el a szervernek (az MDN szerint localhost kivételével). Így egy hálózaton közbeékelődő támadó nem tudja titkosítatlan kérésből kiolvasni. Ha a jelző hiányzik, a süti titkosítatlan kapcsolaton is elmehet.

## Hogyan mérjük

A riport letölti a kezdőoldalt (legfeljebb 5 átirányítást követ), és a **végső válasz** `Set-Cookie` fejléceit nézi meg. A név nélküli fejlécet (nincs benne `=`) nem veszi sütinek.

| Eredmény | Mikor |
|---|---|
| Megfelelő | minden süti kapott `Secure` jelzőt |
| Hiba | legalább egy süti `Secure` nélkül érkezik (a riport a darabszámot és legfeljebb 10 süti nevét mutatja) |
| Nem értékelhető | az oldal nem küld sütit, vagy a végső cím nem `https://` |

A teszt nem lát minden sütit: csak a kezdőoldal `Set-Cookie` fejléceit méri. A JavaScripttel (`document.cookie`) létrehozott sütiket és más oldalak sütijeit nem.

## Hogyan javítsd

A `Secure` jelzőt az a kód állítja be, amelyik a sütit kiadja. A riport csak a PHP munkamenet-sütijére (`PHPSESSID`) ad általános kódot; a többit annál kell beállítani, ami küldi (bővítmény, téma, alkalmazás).

1. Nézd meg a riportban, mely sütik bukták a tesztet.
2. Állapítsd meg, ki adja ki őket. A sütik neve gyakran elárulja (például `PHPSESSID` a PHP munkamenet).
3. Állítsd be a `Secure` jelzőt ott.

### PHP (php.ini)

Ha a `PHPSESSID` a hibás süti:

```ini title="php.ini"
session.cookie_secure = 1
```

> **Figyelem**
>
> A php.net szerint ha a `session.cookie_secure` be van kapcsolva, a munkamenetek csak HTTPS-kapcsolaton működnek. Előbb győződj meg róla, hogy az egész oldal https-en fut ([HTTPS-átirányítás](https://hub.hellowp.io/hu/report/biztonsag/https-atiranyitas/)).

### PHP-kód

Saját kódban a `setcookie()` tömbös alakja (PHP 7.3-tól) tartalmazza a `secure` kulcsot:

```php title="PHP"
setcookie( 'nev', 'ertek', [ 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' ] );
```

A `samesite` értéke `None`, `Lax` vagy `Strict` lehet (php.net).

### nginx (ha proxy mögött küldi a süti)

Ha az nginx egy másik szerver válaszát továbbítja, a `proxy_cookie_flags` az 1.19.3 verziótól kapcsolhat jelzőt a sütikre:

```nginx title="nginx"
proxy_cookie_flags ~ secure;
```

A `~` az összes sütire vonatkozik. Ez csak a továbbított válaszokra hat, és természetesen csak akkor jó, ha az oldal https-en érhető el.

## Hogyan ellenőrizd

Futtasd újra a riportot, vagy nézd meg parancssorban:

```bash title="Terminál"
curl -sI "https://pelda.hu/?v=1" | grep -i '^set-cookie:'
```

Minden kiírt sor végén ott legyen a `Secure`.
