# Süti: SameSite

> A teszt azt nézi, van-e SameSite attribútuma a kezdőoldal sütijeinek; állíts be Lax vagy Strict értéket.

A `SameSite` attribútum azt szabályozza, hogy a böngésző elküldi-e a sütit az idegen oldalról érkező (cross-site) kérésekkel. A php.net szerint ezzel a szerver jelezheti, hogy a sütit nem kell cross-site kéréssel együtt küldeni, ami csökkenti az információszivárgás kockázatát. Az MDN szerint három értéke van: `Strict`, `Lax` és `None`.

- `Strict`: a süti csak azonos oldalról indított kéréssel megy el.
- `Lax`: a süti idegen oldalról is elmegy, ha a látogató egy hivatkozásra kattintva érkezik az oldalra (biztonságos metódusú, felső szintű navigáció), de beágyazott kéréssel nem.
- `None`: a süti idegen oldalról érkező kéréssel is elmegy; ehhez a `Secure` jelző is kötelező.

## 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.

| Eredmény | Mikor |
|---|---|
| Megfelelő | minden sütinek van `SameSite` attribútuma |
| Hiba | legalább egy süti `SameSite` nélkül (vagy üres értékkel) érkezik (a riport a darabszámot és legfeljebb 10 nevet mutatja) |
| Nem értékelhető | az oldal nem küld sütit |

A teszt csak azt nézi, hogy az attribútum **megvan-e**; az értéket nem: a `Strict`, a `Lax` és a `None` egyaránt megfelelő. A JavaScripttel létrehozott sütiket és a nem a kezdőoldalon beállított sütiket nem látja.

> **Megjegyzés**
>
> Az MDN szerint egyes böngészők `Lax` alapértelmezést használnak, ha a `SameSite` hiányzik. A riport ennél szigorúbb: a hiányzó attribútumot hibának veszi, azt kéri, hogy a szerver mondja ki az értéket. Az MDN szerint az alapértelmezett `Lax` ráadásul egy megengedőbb változat (a friss, két percnél nem régebbi sütiket POST-kéréssel is elküldi). A leírás a riport működését követi.

## Hogyan javítsd

Az attribútumot az a kód állítja be, amelyik a sütit kiadja. A riport kódrészlete csak a PHP munkamenet-sütijére (`PHPSESSID`) szól; a többit annál kell beállítani, ami küldi.

Melyiket válaszd? A `Lax` a legtöbb oldalon jó kiindulás: a belső hivatkozások és az idegen oldalról érkező kattintások működnek. A `Strict` akkor jó, ha a sütire idegen oldalról érkezve sem lehet szükség. A `None` csak akkor kell, ha a sütit szándékosan idegen oldalról beágyazva is használni kell, és ehhez `Secure` is kell.

### PHP (php.ini)

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

```ini title="php.ini"
session.cookie_samesite = "Lax"
```

### PHP-kód

Saját kódban a `setcookie()` tömbös alakja (PHP 7.3-tól); a `samesite` értéke `None`, `Lax` vagy `Strict`:

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

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

Az `proxy_cookie_flags` direktíva (1.19.3-tól) a `samesite=lax`, `samesite=strict` és `samesite=none` jelzőket is ismeri:

```nginx title="nginx"
proxy_cookie_flags ~ samesite=lax;
```

### Bővítmény vagy alkalmazás

Ha a sütit egy bővítmény vagy webáruház adja, annak beállításában keresd a `SameSite` értéket, vagy kérd a fejlesztőjétől.

## 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 sorban legyen `SameSite=Lax` (vagy `Strict`, `None`).
