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
|
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
CookieDocument.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