Spec-Zone.ru › HTTP

Set-Cookie: SameSite

Куки SameSite

Безопасный контекст: Данная функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Атрибут SameSite заголовка HTTP ответа Set-Cookie позволяет указать, должен ли ваш куки быть ограничен контекстом сайта-источника (first-party) или контекстом того же сайта.

Примечание: Стандарты, связанные с атрибутом куки SameSite недавно изменились таким образом:

  • Если SameSite не указан, поведение отправки куки SameSite=Lax. Ранее по умолчанию куки отправлялись для всех запросов.
  • Куки с SameSite=None должны теперь также указывать атрибут Secure (они требуют безопасного контекста/HTTPS).
  • Куки с одного домена больше не считаются принадлежащими одному сайту, если они отправляются с использованием другого протокола (http: или https:).

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

Значения

Атрибут SameSite принимает три значения:

Lax

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

Это значение куки по умолчанию, если SameSite не было явно указано в последних версиях браузера (см. «SameSite: По умолчанию Lax» в разделе совместимости с браузерами).

Примечание: Lax заменило None в качестве значения по умолчанию, чтобы гарантировать, что пользователи имеют разумную защиту от некоторых типов межсайтовых атак с подделкой запроса (CSRF).

Для минимизации сбоев из-за нового значения по умолчанию браузеры могут реализовывать режим принудительного выполнения ""Lax-Allowing-Unsafe"" таким образом, что куки могут отправляться с межсайтовыми небезопасными запросами верхнего уровня, если им менее 2 минут. Реализация Chrome и Firefox режима "Lax-Allowing-Unsafe" следует рассматривать как временную, переходную меру.

Strict

Куки будут отправляться только в контексте сайта-источника и не будут отправляться вместе с запросами, инициированными сторонними веб-сайтами.

None

Куки будут отправляться во всех контекстах, т.е. в ответах как на запросы сайта-источника, так и на межсайтовые запросы. Если SameSite=None задано, то также должен быть установлен атрибут куки Secure (иначе куки будет заблокирован).

Устранение распространённых предупреждений

SameSite=None требует Secure

В консоли могут появиться предупреждения, подобные следующим:

Cookie "myCookie" rejected because it has the "SameSite=None" attribute but is missing the "secure" attribute.

This Set-Cookie was blocked because it had the "SameSite=None" attribute but did not have the "Secure" attribute, which is required in order to use "SameSite=None".

Предупреждение появляется, потому что любой куки, который запрашивает SameSite=None, но не помечен как Secure, будет отклонен.

Set-Cookie: flavor=choco; SameSite=None

Для исправления необходимо добавить атрибут Secure к вашим кукам SameSite=None.

Set-Cookie: flavor=choco; SameSite=None; Secure

Куки Secure отправляются на сервер только с зашифрованным запросом по протоколу HTTPS. Обратите внимание, что небезопасные сайты (http:) не могут устанавливать куки с директивой Secure.

Примечание: В старых версиях браузера может появиться предупреждение, что куки будет заблокирован в будущем. Например:

Куки myCookie вскоре будет отклонен, так как атрибут SameSite установлен на None, или имеет неверное значение, без атрибута secure .

Куки без SameSite по умолчанию SameSite=Lax

Недавние версии современных браузеров обеспечивают более безопасное значение по умолчанию для SameSite ваших куков, поэтому в консоли может появиться следующее сообщение:

Cookie "myCookie" has "SameSite" policy set to "Lax" because it is missing a "SameSite" attribute, and "SameSite=Lax" is the default value for this attribute.

Предупреждение появляется, потому что политика SameSite для куки не была явно указана:

Set-Cookie: flavor=choco

Вы должны явно указать желаемую политику SameSite для вашего куки (а не полагаться на то, что браузеры будут применять SameSite=Lax автоматически). Это также улучшит работу на различных браузерах, так как не все из них по умолчанию устанавливают Lax.

Set-Cookie: flavor=choco; SameSite=Lax

Пример

RewriteEngine on
RewriteBase "/"
RewriteCond "%{HTTP_HOST}"       "^example\.org$" [NC]
RewriteRule "^(.*)"              "https://www.example.org/index.html" [R=301,L,QSA]
RewriteRule "^(.*)\.ht$"         "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule;01;https://www.example.org;30/;SameSite=None;Secure]
RewriteRule "^(.*)\.htm$"        "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule;02;https://www.example.org;30/;SameSite=None;Secure]
RewriteRule "^(.*)\.html$"       "index.php?nav=$1 [NC,L,QSA,CO=RewriteRule;03;https://www.example.org;30/;SameSite=None;Secure]
[...]
RewriteRule "^admin/(.*)\.html$" "admin/index.php?nav=$1 [NC,L,QSA,CO=RewriteRule;09;https://www.example.org:30/;SameSite=Strict;Secure]

Спецификации

Спецификация
Механизм управления состоянием HTTP
# sane-set-cookie
Куки: Механизм управления состоянием HTTP
# name-the-samesite-attribute

Совместимость с браузерами

Настольный Мобильный
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari на IOS Samsung Internet
Lax
51
16
60
11
39
12
51
51
60
41
12.2
5.0
Lax_default
80
86
69
Нет
71
Нет
80
80
Нет
60
Нет
13.0
None
67
51-67
Отклоняет файлы cookie с SameSite=None. См. SameSite=None: Known Incompatible Clients.
16
60
11
54
51-54
Отклоняет файлы cookie с SameSite=None. См. SameSite=None: Known Incompatible Clients.
13
Не поддерживается до версии macOS 10.15 (Catalina).
67
51-67
Отклоняет файлы cookie с SameSite=None. См. SameSite=None: Known Incompatible Clients.
67
51-67
Отклоняет файлы cookie с SameSite=None. См. SameSite=None: Known Incompatible Clients.
60
48
41-48
Отклоняет файлы cookie с SameSite=None. См. SameSite=None: Known Incompatible Clients.
13
9.4
5.4-9.4
Отклоняет файлы cookie с SameSite=None. См. SameSite=None: Known Incompatible Clients.
Strict
51
16
60
11
39
12
51
51
60
41
12.2
5.0
SameSite
51
16
60
11
39
13
Safari 13 на macOS 10.14 (Mojave) обрабатывает SameSite=None и недопустимые значения как Strict. Это исправлено в версии 10.15 (Catalina) и более поздних.
12
Обрабатывает SameSite=None и недопустимые значения как Strict в macOS до 10.15 Catalina. См. ошибка 198181.
51
51
60
41
13
12.2
Обрабатывает SameSite=None и недопустимые значения как Strict в iOS до 13. См. ошибка 198181.
5.0
schemeful
89
89
79
Нет
75
Нет
Нет
89
Нет
63
Нет
15.0
secure_context_required
80
86
69
Нет
71
Нет
80
80
Нет
60
Нет
13.0

См. также

  • HTTP-cookie
  • Cookie
  • Document.cookie
  • Samesite cookies explained (блог web.dev)

© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API