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

Когда веб-сервер отвечает на запрос ресурса, он может включить в свой ответ заголовок Set-Cookie . Этот заголовок сообщает вашему браузеру о необходимости сохранить cookie-файл.

Например: Set-Cookie:cat=tabby .

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

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

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

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

Безопасный

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

Только HTTP

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

SameSite

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

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

Узнайте больше: Что такое сторонние файлы 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 иногда называют сессионным 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

Путь

Если в заголовке ответа Set-Cookie присутствует атрибут Path , то установленный 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

Инструменты

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