Knowledge Base

Безопасность cookies: Secure, HttpOnly, SameSite

Три обязательных флага

Категория: Web App Security · Риск: medium

Три обязательных флага

Secure

Cookie передаётся только по HTTPS.

Set-Cookie: session=abc; Secure

Без этого флага cookie передаётся и по HTTP — перехват при MitM.

HttpOnly

Cookie недоступен через JavaScript (`document.cookie`).

Set-Cookie: session=abc; HttpOnly

Защищает от XSS-кражи сессий: даже при внедрении скрипта атакующий не сможет прочитать cookie.

SameSite

Контролирует передачу cookie при межсайтовых запросах.

| Значение | Поведение | |----------|-----------| | `Strict` | Только для запросов с того же домена | | `Lax` | Для GET переходов, нет для POST с других сайтов (рекомендуется) | | `None; Secure` | Для всех запросов (нужен Secure) |

Итоговый правильный Set-Cookie

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

Nginx — для статических cookie (не из приложения)

proxy_cookie_flags ~ secure httponly samesite=lax;

Django / Flask / Express

# Django settings.py
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = True