Атрибуты файлов cookie

Когда веб-сервер отвечает на запрос ресурса, он может включить в свой ответ заголовок Set-Cookie . Этот заголовок указывает браузеру на необходимость сохранения cookie-файла. Например: Set-Cookie:cat=tabby . В разделе «Что такое cookie-файлы? » объясняется, как они работают.

Помимо указания имени и значения cookie-файла, Set-Cookie может включать атрибуты, управляющие установкой cookie-файлов и сроком их действия. Атрибуты cookie-файлов разделяются точкой с запятой. Например:

    Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;

В этом документе объясняются наиболее важные атрибуты файлов cookie:

Использование HTTP-cookie-файлов объясняет атрибуты cookie-файлов более подробно.

Безопасный

Если заголовок Set-Cookie содержит ключевое Secure , файл cookie будет включаться только в зашифрованные запросы, использующие протокол HTTPS. В HTTP-запросы файл cookie не включается. Это может помочь предотвратить атаки через посредников , когда злоумышленник тайно вмешивается в обмен данными между браузером и сервером, чтобы передать информацию и потенциально изменить её.

HTTPOnly

Если заголовок Set-Cookie включает HTTPOnly , JavaScript не может получить доступ к файлу cookie, например, с помощью document.cookie . Это помогает защититься от определённых типов атак, нацеленных на файлы cookie.

SameSite

Запрос ресурса с сайта, отличного от того, который вы посещаете, называется межсайтовым запросом. Файл cookie, устанавливаемый в ответ на межсайтовый запрос, называется сторонним файлом cookie .

Атрибут SameSite определяет, будет ли сторонний cookie-файл включен в запрос. Он имеет три возможных значения: Strict , Lax или None .

Узнайте больше: Что такое сторонние файлы cookie?

Строгий

Файл cookie будет отправляться только в ответ на запросы со страницы, расположенной на сайте-источнике файла cookie. Например, представьте, что пользователь заходит на сайт cats.example и у него установлен файл cookie с атрибутом SameSite=Strict . Позже пользователь переходит на другой сайт и переходит по ссылке на страницу с сайта cats.example . Установленный файл cookie не будет включен в этот запрос.

Лакс

Это работает так же, как Strict , за исключением того, что браузер также включит cookie, когда пользователь переходит по ссылке на исходный сайт cookie. (В предыдущем примере Strict cookie включался , когда пользователь переходит по ссылке на cats.example .) Lax используется по умолчанию, если в заголовок Set-Cookie не включен атрибут SameSite .

Никто

Без ограничений: cookie-файл будет включён в запрос, независимо от того, является ли он межсайтовым. При SameSite=None у cookie-файла также должен быть атрибут Secure .

Разделенный

Этот атрибут позволяет выбрать раздельное хранение cookie-файлов с отдельной «копией cookie-файлов» для каждого сайта верхнего уровня. Файл cookie имеет двойной ключ: ключ сайта верхнего уровня и ключ домена, который его установил.

Например: представьте, что веб-сайты A и B содержат iframe с веб-сайта C. Разделенный cookie-файл, установленный iframe на веб-сайте A, не может быть доступен iframe на веб-сайте B: cookie-файл AC отделен от cookie-файла BC.

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

Файлы cookie с атрибутом Partitioned называются CHIPS: файлы cookie с независимым разделенным состоянием.

Разделенные файлы cookie должны иметь атрибут Secure .

Узнайте больше: Файлы cookie с независимым разделенным состоянием .

Срок действия и максимальный возраст

Вы можете указать дату и время Expires или Max-Age в секундах, по истечении которого файл cookie должен быть удалён и больше не отправляться. Например:

  • Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
  • Set-Cookie:cat=tabby; Max-Age=86400

Если атрибуты Max-Age или Expires не указаны, файл cookie будет удалён по завершении текущего сеанса. Такие файлы cookie иногда называют сеансовыми .

Домен

Если заголовок Set-Cookie имеет атрибут Domain , cookie-файл будет включен в запросы к указанному домену и любому из его поддоменов.

Если заголовок Set-Cookie не имеет атрибута Domain , cookie-файл не будет включен в запросы к поддоменам.

Другими словами, включение атрибута Domain снижает ограничения домена.

Например, вот ответ с сайта cats.example :

  • Set-Cookie:cat=tabby
    Файл cookie будет включен только в запросы к cats.example
  • Set-Cookie:cat=tabby; Domain=cats.example
    Файл cookie будет включен в запросы к cats.example , а также в любые запросы к ресурсам на поддоменах, таких как fluffy.cats.example или user.assets.cats.example

Путь

Если атрибут Path включен в заголовок ответа Set-Cookie , то устанавливаемый cookie-файл будет включен только в запросы к URL-адресам (на сайте, установившем cookie-файл!), которые соответствуют значению Path .

Например:

  • Set-Cookie:cat=tabby; Path=/articles
    Файл cookie будет включен в запрос по любому URL-пути, который начинается с /articles :
    https://cats.example/articles/tabby/index.html
    https://cats.example/articles/breeds/tabby/index.html
    https://cats.example/images/tabby.jpg
    https://cats.example/en/articles/tabby/index.html
  • Set-Cookie:cat=tabby; Path=/
    Все запросы к любому URL-адресу на сайте будут включать cookie-файл.

Если заголовок ответа Set-Cookie не содержит значения Path , файл cookie будет включен только в запросы к тому же каталогу. Например, представьте, что файл cookie cat=tabby устанавливается в ответ на запрос cats.example/images/tabby.jpg. Если Path не указан, файл cookie будет включен только в запросы к файлам в каталоге cats.example/images .

Демо-версии

  • 1pc.glitch.me : демо-версия cookie-файлов от первого лица
  • 3pc.glitch.me : демонстрация сторонних файлов cookie

Инструменты

Узнать больше