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