Tovább a tartalomhoz

Süti: HttpOnly

A teszt azt nézi, kapnak-e HttpOnly jelzőt a munkamenet-jellegű sütik; nélküle az oldalon futó bármelyik szkript elolvashatja őket.

A HttpOnly jelzővel ellátott sütit a böngésző nem engedi olvasni JavaScriptből (például a document.cookie útján), csak a szervernek küldi el a kérésekkel. Ha a munkamenet-süti nem HttpOnly, egy XSS-hiba esetén a támadó szkriptje kiolvashatja, és a látogató munkamenetét átveheti. Az MDN azt is megjegyzi, hogy a HttpOnly süti a JavaScripttel indított kérésekkel továbbra is elmegy a szerverre: a jelző az olvasást tiltja, a küldést nem.

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. Itt nem minden sütit vizsgál, csak a munkamenet-jellegű nevűeket. Egy süti akkor számít munkamenet-jellegűnek, ha a neve (kis- és nagybetűre való tekintet nélkül):

  • tartalmazza ezek valamelyikét: sess, token, auth, login;
  • pontosan sid, vagy _sid-re végződik;
  • PHPSESSID;
  • wordpress_logged_in-nel vagy wp_woocommerce_session-nel kezdődik.
Eredmény Mikor
Megfelelő minden munkamenet-jellegű süti kapott HttpOnly jelzőt, vagy nincs ilyen süti
Hiba legalább egy munkamenet-jellegű süti HttpOnly nélkül érkezik (a riport a darabszámot és legfeljebb 10 nevet mutatja)
Nem értékelhető az oldal egyáltalán nem küld sütit

Más nevű sütit (például analitikai vagy beállítássüti) nem vizsgál. Csak a kezdőoldal fejléceit látja, a JavaScripttel létrehozott sütiket nem (ezeken a HttpOnly eleve nem is állítható be).

A jelzőt 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 (bővítmény, webáruház, alkalmazás).

Ha a PHPSESSID a hibás süti:

php.ini
session.cookie_httponly = 1

A php.net szerint ez a beállítás megjelöli a munkamenet-sütit úgy, hogy csak a HTTP-protokollon át érhető el, szkriptnyelvből (például JavaScriptből) nem. Alapértéke kikapcsolt. Kérheted a tárhelytől is.

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

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

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

Szekció neve “nginx (ha proxy mögött küldi a süti)”

Az nginx proxy_cookie_flags direktívája (1.19.3-tól) a továbbított sütikre kapcsol jelzőt:

nginx
proxy_cookie_flags ~ httponly;

Ha a sütit egy bővítmény vagy webáruház adja, annak beállításában (vagy a fejlesztőjénél) keresd a HttpOnly jelzőt. Ha egy süti szándékosan JavaScriptből is olvasható kell legyen, az nem lehet munkamenet-süti, és a neve se utaljon erre.

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

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

A munkamenet-jellegű sütik sorában legyen ott a HttpOnly.

Készült:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások