Флаги Cookie определяют поведение и уровень безопасности при передаче
и хранении cookie в браузере. Они задаются сервером через заголовок
Set-Cookie и интерпретируются клиентом на уровне браузера,
влияя на доступность данных для JavaScript, условия отправки cookie на
сервер и защиту от распространённых атак.
Флаг HttpOnly ограничивает доступ к cookie исключительно
серверной логикой. При его установке браузер запрещает обращение к
cookie через JavaScript (document.cookie становится
недоступен для этих значений).
Основное назначение — защита от атак XSS (Cross-Site Scripting), при которых злоумышленник внедряет вредоносный скрипт в страницу и пытается похитить сессионные данные.
Ключевые свойства HttpOnly:
Типичный сценарий использования — хранение идентификаторов сессии:
Set-Cookie: sessionId=abc123; HttpOnly
В таких условиях даже при наличии уязвимости XSS злоумышленник не сможет получить значение cookie через клиентский скрипт.
Флаг Secure ограничивает передачу cookie только
HTTPS-соединениями. Браузер игнорирует такие cookie при запросах по
HTTP.
Основные характеристики:
Пример:
Set-Cookie: authToken=xyz789; Secure
Использование Secure критично в системах с авторизацией,
так как предотвращает перехват cookie в сетевых атаках типа
man-in-the-middle.
Комбинация Secure и HttpOnly часто
применяется для сессионных cookie, создавая базовый уровень защиты как
на транспортном, так и на клиентском уровне.
Флаг SameSite управляет тем, в каких условиях cookie
отправляются при межсайтовых запросах. Его основная цель — снижение
риска CSRF (Cross-Site Request Forgery).
Поддерживаются три значения:
Cookie отправляются только при запросах, инициированных с того же сайта.
Set-Cookie: sessionId=abc123; SameSite=Strict
Баланс между безопасностью и удобством. Cookie отправляются при:
Set-Cookie: sessionId=abc123; SameSite=Lax
Это значение часто используется по умолчанию в современных браузерах.
Cookie отправляются во всех контекстах, включая кросс-доменные
запросы. Требует обязательного флага Secure.
Set-Cookie: sessionId=abc123; SameSite=None; Secure
Используется для:
Без Secure такие cookie будут отклонены современными
браузерами.
Комбинация флагов формирует уровень защиты:
HttpOnly блокирует доступ через JavaScriptSecure защищает транспортный уровеньSameSite контролирует межсайтовую отправкуПример типичной конфигурации для сессий:
Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Lax
Такая комбинация снижает риск:
В Node.js и веб-фреймворках cookie формируются через HTTP-заголовки. Например:
Set-Cookie: token=secureValue; HttpOnly; Secure; SameSite=Strict
При использовании серверных библиотек управление этими флагами обычно абстрагируется, но итоговый результат всё равно сводится к формированию корректного заголовка.
Корректная конфигурация cookie учитывает следующие принципы:
HttpOnlySecureSameSite устанавливается в Lax или
Strict по умолчаниюSameSite=None применяется только при реальной
необходимости кросс-доменных сценариевSecure бессмысленнымСовременные браузеры усиливают значение SameSite по
умолчанию, что делает явное указание этого флага частью базовой гигиены
безопасности веб-приложений.