1/Cookie: небольшое руководство для разработчиков

Введение

Файлы cookie — это маленькие текстовые файлы, которые веб-сайты сохраняют на устройствах пользователей для хранения различных данных. Несмотря на их небольшой размер, роль этих файлов в цифровом мире огромна.

В современной веб-разработке понимание и правильное использование файлов cookie является ключевым аспектом создания безопасных, эффективных и пользовательски ориентированных сайтов. Файлы cookie играют центральную роль в управлении сессиями, сохранении предпочтений пользователей, реализации механизмов аутентификации и сборе аналитических данных.

Для разработчиков важно не только уметь эффективно их применять, но и понимать обязательства по соблюдению норм конфиденциальности и безопасности данных.

История

Файлы cookie были изобретены в 1994 году программистом Лу Монтюлли, работавшим в Netscape Communications, для обеспечения сохранения состояния в веб-приложениях. Изначально они использовались для отслеживания сеансов пользователей и сохранения информации о состоянии веб-сайтов между посещениями. С тех пор файлы cookie стали ключевым инструментом в веб-разработке, позволяя сайтам запоминать информацию о пользователях, такую как предпочтения в настройках, данные для входа в систему и содержимое корзины покупок.

Важным этапом в развитии стандартов работы с файлами cookie стало введение спецификации RFC 6265 в апреле 2011 года. Этот документ стандартизировал использование файлов cookie в интернете, устанавливая единые правила их создания, отправки и обработки.

Спецификация RFC 6265

Спецификация RFC 6265 "HTTP State Management Mechanism", является документом, который определяет как браузеры и серверы должны использовать файлы cookie для управления состоянием HTTP сессий. Опубликованная в апреле 2011 года, эта спецификация призвана стандартизировать работу с файлами cookie, которая до этого момента была предметом разночтений из-за различий в реализации разными браузерами.

Важные аспекты RFC 6265 включают:

  • Формат cookie
  • Отправка cookie
  • Обработка cookie
  • Конфиденциальность и безопасность

Документ неоднократно обновлялся. Например, в ноябре 2015 года, был опубликован документ "Cookie Prefixes", который дополняет спецификацию информацией по используемым префиксам.

Параметры cookie

Файлы cookie имеют различные свойства, которые определяют их характеристики и поведение.

Обязательные параметры:

  • name
    Уникальное не регистрозависимое имя, идентифицирующее файл cookie. Например, "theme".
  • value
    Значение cookie. Например, "darkgreen".

Дополнительные параметры:

  • domain
    Строка. Домен, для которого файл cookie действителен. Может включать и поддомены. Например, ".ip-marchenko.ru".
    Значение по умолчанию: домен, который установил файл cookie.
  • path
    Строка. Путь на сервере, для которого файл cookie действителен. Может включать конкретные страницы. Например, "/about".
    Значение по умолчанию: "/", корневой путь сайта.
  • secure
    Булевое значение. Ограничивает передачу файла cookie только по защищенному протоколу HTTPS. Например, "true".
    Значение по умолчанию: "false".
  • httponly
    Булевое значение. Ограничивает доступ к файлу cookie на стороне клиента, в частности, через JS. Например, "false".
    Значение по умолчанию: "false".
  • max-age
    Число. Определяет количество секунд, в течение которых файл cookie будет действителен. Например, "3600".
    В случае одновременного использования с expires имеет приоритет.
  • expires
    Дата. Определяет конкретное время до которого файл cookie будет действителен. Например, "2025-02-12T21:16:13.000Z".
    В случае одновременного использования с max-age игнорируется.
  • samesite
    Устанавливает, должен ли браузер отправлять файл cookie с запросами, инициированными сторонними сайтами.
    Возможные значения: 
    • strict
      Файл cookie будет отправляться только в том случае, если запрос происходит непосредственно с сайта, а не из стороннего источника.
      Это наиболее строгий вариант.
    • lax
      Более мягкая версия, чем "strict".
      Файл cookie будет отправляться с запросами, которые инициированы верхним уровнем навигации пользователя. Например, если пользователь переходит по ссылке с другого сайта.
    • none
      Значение по умолчанию.
      Файл cookie будет отправляться с любыми запросами, в том числе и от сторонних сайтов. Однако, для использования значения "none", также необходимо установить атрибут "secure", чтобы файл cookie был отправляем только через безопасное соединение HTTPS.

Эти свойства позволяют разработчикам тонко настраивать поведение файлов cookie, обеспечивая необходимую функциональность и соблюдение стандартов безопасности и конфиденциальности.

Префиксы cookie

Префиксы в cookie предназначены для повышения безопасности использования их, путём наложения определённых требований к их установке и отправке.

Основные префиксы:

  • __Secure-
    cookie с этим префиксом должны отправляться только по защищённому соединению (HTTPS) и должны иметь установленный атрибут secure. Это помогает обеспечить, что cookie не будет перехвачен при передаче по незащищённому соединению.
  • __Host-
    cookie с этим префиксом должны устанавливаться с атрибутом secure, отправляться только через HTTPS, не иметь атрибут domain, и должны быть установлены с атрибутом path=/. Это ограничивает cookie работой строго с доменом, который его установил, и делает его более устойчивым к определённым видам атак.
Сравнение префиксов
Параметр __Secure- __Host-
secure + +
domain -
path /

∗ - любое значение, либо его отсутствие

Если хотя бы одно из представленных требований не соблюдено, браузер откажет в установке файла cookie.

Префиксы поддерживаются в следующих версиях браузеров: Chrome 49+, Firefox 50+, Edge 79+ и Opera 36+. Кроме того, на текущий момент они также поддерживаются во многих других современных браузерах.

Типы cookie

Основная типизация cookie файлов включает в себя:

  • Сеансовые (Session cookies)
    Эти файлы cookie хранятся в памяти браузера только в течение текущего сеанса и удаляются, когда пользователь закрывает браузер. Они обычно используются для управления состоянием сессии и временной информацией.
  • Постоянные (Persistent cookies)
    В отличие от сеансовых файлов cookie, постоянные сохраняются на устройстве пользователя даже после закрытия браузера. У них задается определенный срок действия, и они могут использоваться для сохранения предпочтений пользователя или аналитических данных.
  • Безопасные (Secure cookies)
    Эти файлы cookie устанавливаются с использованием защищенного соединения HTTPS, что обеспечивает шифрование данных между браузером пользователя и веб-сервером. Они предназначены для повышения безопасности, особенно при передаче конфиденциальной информации.
  • Сторонние куки (Third-party cookies)
    Это файлы cookie, которые создаются и используются не веб-сайтом, на который зашел пользователь, а другими доменами. Эти куки обычно используются для рекламных и аналитических целей.
  • Зомби-cookie
    Это тип файлов cookie, который может самовосстанавливаться после удаления. Это делает их особенно устойчивыми к попыткам пользователя избавиться от них, поэтому они получили название "зомби". Эти cookie используют различные хранилища данных на устройстве пользователя, кроме стандартного хранилища файлов cookie браузера, такие как Flash Local Shared Objects (LSO), Web Storage (localStorage и sessionstorage), IndexedDB, Web SQL Database и даже кэш ETag, для того чтобы воссоздать свой идентификатор в браузере пользователя после того, как он был удален.

Удобство и безопасность

Для веб-разработчиков cookie служат важным инструментом для сбора информации и аналитики поведения посетителей, что способствует улучшению качества предоставляемых услуг. Тем не менее, использование cookie несет за собой проблемы конфиденциальности и безопасности, поскольку через них может собираться личная информация без согласия пользователей, вызывая опасения по поводу защиты персональных данных. В этом контексте, регулирование вроде GDPR играет важную роль, устанавливая строгие нормы для сбора и обработки персональных данных и требуя от сайтов соблюдать принципы ответственности в использовании файлов cookie.

Аналог GDPR в РФ

В России действует Федеральный закон "О персональных данных" (ФЗ-152), который регулирует вопросы сбора, обработки и защиты персональных данных.

Этот закон устанавливает основные принципы обработки персональных данных, права субъектов данных, обязанности операторов (юридических или физических лиц, осуществляющих обработку персональных данных), и предписывает определенные меры безопасности.

Ограничения в cookie

Спецификации устанавливают минимальные объемы для хранения cookie в браузерах. Это включает не менее 300 cookie размером 4096 байт каждый и, по крайней мере, 20 cookie для каждого сервера или домена.

Популярные браузеры также имеют максимальные ограничения для cookie, например:

  • Internet Explorer 6/7: 20 cookie
  • Opera 9: 30 cookie
  • Firefox 87.0: 150 cookie
  • Google Chrome 58.0: 176 cookie
  • Microsoft Edge 91.0: 176 cookie
  • Safari 14.0: 600 cookie

Некоторые браузеры на практике могут устанавливать более строгие ограничения, например, Internet Explorer ограничивает общий объем всех cookie в одном домене до 4096 байт.

Приоритет использования одинаковых cookie-файлов

Данный приоритет не является стандартизированным, но большинство браузеров его придерживаются:

  • Приоритет по пути (параметр "path")
    Если существует несколько cookie с одинаковым именем, установленных на разных путях, браузер может отдавать предпочтение cookie, установленному на более конкретном пути. Например, при посещении сайта по пути "/path/subpath", более высокий приоритет имеет cookie с путем "/path/subpath" по сравнению с "/path" или "/".
  • Приоритет времени установки (параметры "max-age"/"expires")
    Если cookie установлены на одном и том же пути, браузер может руководствоваться временем установки. Cookie, установленные позднее, могут перезаписать ранее установленные.

Практические советы для разработчиков по работе с файлами cookie

  1. Прозрачность в политике использования файлов cookie
    Предоставьте пользователям четкую и понятную информацию о том, какие файлы cookie используются на вашем сайте, и с какой целью. Это помогает в установлении доверия и соблюдении законодательных требований.
  2. Соблюдение стандартов безопасности
    Уделяйте особое внимание безопасности передачи данных через файлы cookie. Используйте шифрование (HTTPS) для обеспечения защищенной передачи информации.
  3. Ограничение срока действия файлов cookie
    Рассмотрите использование срока действия сеансовых файлов cookie там, где это возможно, особенно для данных, которые не требуют долгосрочного хранения.
  4. Блокировка сторонних файлов cookie
    Избегайте использования сторонних файлов cookie без необходимости.
  5. Обеспечение выбора пользователей
    Предоставьте пользователям возможность управлять своими предпочтениями по использованию файлов cookie, предоставляя инструменты для блокировки или удаления cookie.
  6. Анонимизация данных
    При сборе и использовании данных соблюдайте принцип анонимизации. Избегайте хранения чувствительной информации в файлах cookie, особенно без согласия пользователя.
  7. Тестирование на совместимость
    Тестируйте ваш веб-сайт на совместимость с различными браузерами, убедитесь, что ваше использование файлов cookie не вызывает проблем для пользователей.
  8. Управление согласиями
    Внедрите механизм получения согласия от пользователей на использование файлов cookie. Это особенно важно в свете законодательства о защите данных, такого как GDPR.
  9. Мониторинг изменений в законодательстве
    Регулярно отслеживайте обновления в законодательстве о защите данных и вносите необходимые изменения в политику использования файлов cookie и практики сбора данных.

Эти советы помогут разработчикам создавать более безопасные, прозрачные и соблюдающие законодательство веб-приложения, уважающие конфиденциальность пользователей.

Заключение

Файлы cookie стали неотъемлемой частью интернета, обеспечивая персонализацию и удобство. Однако важно балансировать между преимуществами и рисками для приватности. Пользователи должны активно управлять своими настройками, а разработчики — соблюдать стандарты безопасности и прозрачности. Только так можно обеспечить эффективное использование файлов cookie, сохраняя доверие и безопасность в онлайн-среде.

Интересные ссылки в тему

Про Set-Cookie и поддержку браузеров:
https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Set-Cookie

Спецификация RFC6265:
https://datatracker.ietf.org/doc/html/rfc6265

Обновление RFC6265 в ноябре 2015:
https://datatracker.ietf.org/doc/html/draft-west-cookie-prefixes