Что такое cookie?
Куки — это небольшие текстовые данные, хранимые браузером и отправляемые на сервер с каждым HTTP-запросом. Они используются для управления состоянием сессии, персонализации и отслеживания.
Определение и основная цель
HTTP-куки — это механизм клиент-серверного хранения состояния в рамках протокола HTTP. Основные цели:
- Управление сеансом (Session Management): Идентификация пользователя при аутентификации (например, хранение
session_id). - Персонализация (Personalization): Сохранение пользовательских предпочтений (тема, язык, настройки).
- Отслеживание (Tracking): Мониторинг поведения пользователя на сайте (аналитика) и между сайтами (ретаргетинг).
Техническая структура
Куки состоят из пары ключ-значение и набора атрибутов, управляющих их жизненным циклом и доступом. Пример заголовка Set-Cookie:
Set-Cookie: sessionId=abc123; Expires=Wed, 21 Oct 2026 07:28:00 GMT; Domain=.example.com; Path=/; Secure; HttpOnly; SameSite=Lax; Partitioned
Ключевые атрибуты (2024–2025):
- Expires / Max-Age: Задают время жизни. Если не указаны — куки являются сессионными и удаляются при закрытии браузера.
- Domain и Path: Определяют область видимости. Куки отправляются на все поддомены указанного
Domainи по пути, соответствующемуPath. - Secure: Куки передаются только по защищенному протоколу HTTPS. Стандарт де-факто в 2025.
- HttpOnly: Запрещает доступ к куки через JavaScript (
document.cookie), защищая от XSS-атак. Обязателен для сессионных идентификаторов. - SameSite: Критически важный атрибут для защиты от CSRF-атак. Принимает три значения:
Strict: Куки отправляются только в контексте того же сайта.Lax(значение по умолчанию в современных браузерах): Куки отправляются при переходе по ссылке с другого сайта, но не при кросс-доменных POST-запросах или загрузках ресурсов (например,<img>).None: Куки отправляются при всех кросс-сайтовых запросах. Требует установкиSecure.
- Partitioned (экспериментальный, часть спецификации CHIPS — «Cookies Having Independent Partitioned State»): Атрибут, призванный заменить блокировку сторонних кук. Куки, установленные с
Partitioned, привязываются к комбинации топ-левел домена (сайта, который посещает пользователь) и домена, их установившего. Это позволяет сохранить функциональность (например, виджет чата) без возможности кросс-сайтового отслеживания. Поддерживается в Chrome и других браузерах на Chromium.
Механизм работы
- Установка: Сервер отправляет HTTP-ответ с заголовком
Set-Cookie. - Хранение: Браузер сохраняет куки на клиенте (файловая система или специализированное хранилище).
- Отправка: При последующих запросах к соответствующему домену и пути браузер автоматически добавляет заголовок
Cookie.
Основные типы куки
- Сессионные (Session Cookies): Без атрибутов
Expires/Max-Age. Удаляются при закрытии браузера. - Постоянные (Persistent Cookies): С указанным сроком жизни. Хранятся до истечения срока или удаления пользователем.
- Сторонние (Third-party Cookies): Устанавливаются доменом, отличным от того, который пользователь видит в адресной строке (например, рекламной сетью через
<iframe>). Находится в процессе активного ограничения: Chrome начал поэтапное отключение сторонних кук в 2024 году. Safari и Firefox блокируют их по умолчанию уже несколько лет.
Безопасность
- CSRF (Межсайтовая подделка запроса): Атака, при которой злоумышленник заставляет браузер жертвы выполнить нежелательный запрос к уязвимому сайту, используя прикрепленные к нему куки. Защита: Использование атрибута
SameSite=Lax(илиStrict), проверка CSRF-токенов на сервере. - XSS (Межсайтовый скриптинг): Если куки не защищены атрибутом
HttpOnly, злоумышленник может украсть их через внедренный JavaScript-код. Защита: Все куки, не требующие доступа из JS, должны быть помечены какHttpOnly. - Перехват трафика: Передача кук по незашифрованному каналу (без
Secure).
Современные альтернативы и тенденции
- Web Storage API (
localStorage,sessionStorage): Хранилище «ключ-значение» только на стороне клиента. Данные не отправляются автоматически на сервер, что делает их непригодными для аутентификации, но удобными для локальных настроек. - IndexedDB: Асинхронная клиентская база данных для хранения больших объемов структурированных данных.
- Отказ от сторонних кук: Движение к конфиденциальности пользователей (инициатива Privacy Sandbox от Google) приводит к замене классических сторонних кук на новые API (Topics, Attribution Reporting, Protected Audience), призванные балансировать между рекламой и приватностью. Атрибут
Partitioned— ключевой шаг в этом переходе.
Законодательные аспекты (GDPR, CCPA/CPRA)
Использование кук строго регулируется законами о защите данных. Основные требования:
- Информированное согласие: Обязательно получение явного, конкретного и подтвержденного согласия пользователя перед установкой любых кук, не являющихся строго необходимыми для функционирования сайта (технические, сессионные).
- Прозрачность и контроль: Необходимо предоставить четкую и понятную политику использования кук и простой механизм для управления предпочтениями или отзыва согласия.
- Минимизация данных: Сбор и хранение данных должны быть ограничены четко определенными целями.
Куки - критически важный инструмент для управления сессиями, но их использование, особенно сторонних, строго регламентировано. Современная разработка требует обязательного применения защитных атрибутов (Secure, HttpOnly, SameSite), учета законодательных требований и адаптации к изменениям в браузерах.