Browser Support
Каждый cookie-файл содержит пару ключ-значение, а также ряд атрибутов, которые определяют, когда и где этот cookie-файл используется.
Введение атрибута SameSite (определенного в RFC6265bis ) позволяет указать, относится ли ваш cookie только к контексту первого сайта или к контексту того же сайта. Полезно понимать, что именно означает здесь «сайт». Сайт — это комбинация суффикса домена и части домена, предшествующей ему. Например, домен www.web.dev является частью сайта web.dev .
Ключевой термин: Если пользователь находится на сайте www.web.dev и запрашивает изображение с static.web.dev , это считается запросом внутри одного сайта .
Список общедоступных суффиксов определяет, какие страницы считаются расположенными на одном сайте. Он зависит не только от доменов верхнего уровня, таких как .com , но также может включать сервисы, например, github.io . Это позволяет считать your-project.github.io и my-project.github.io отдельными сайтами.
Ключевой термин: Если пользователь находится на your-project.github.io и запрашивает изображение с my-project.github.io , это межсайтовый запрос.
Используйте атрибут SameSite для указания использования файлов cookie.
Атрибут SameSite в cookie предоставляет три различных способа управления этим поведением. Вы можете не указывать этот атрибут, или же использовать Strict или Lax чтобы ограничить использование cookie только запросами внутри одного сайта.
Если вы установите SameSite в значение Strict , ваш cookie может быть отправлен только в контексте первого лица; то есть, если сайт, для которого предназначен cookie, совпадает с сайтом, отображаемым в адресной строке браузера. Таким образом, если cookie promo_shown установлен следующим образом:
Set-Cookie: promo_shown=1; SameSite=Strict
Когда пользователь находится на вашем сайте, cookie отправляется вместе с запросом, как и ожидалось. Однако, если пользователь переходит на ваш сайт по ссылке с другого сайта, cookie не отправляется при этом первоначальном запросе. Это хорошо для cookie, связанных с функциями, которые всегда находятся за первоначальной навигацией, такими как смена пароля или совершение покупки, но это слишком ограничительно для cookie типа promo_shown . Если ваш читатель переходит на сайт по ссылке, он хочет, чтобы cookie был отправлен, чтобы его предпочтения могли быть учтены.
SameSite=Lax позволяет браузеру отправлять cookie-файлы вместе с этими ссылками верхнего уровня. Например, если другой сайт ссылается на контент вашего сайта, в данном случае используя вашу фотографию кошки и предоставляя ссылку на вашу статью следующим образом:
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
При этом для файла cookie установлено значение Lax следующим образом:
Set-Cookie: promo_shown=1; SameSite=Lax
Когда браузер запрашивает amazing-cat.png для блога другого пользователя, ваш сайт не отправляет cookie-файл. Однако, когда читатель переходит по ссылке cat.html на вашем сайте, этот запрос включает cookie-файл.
Мы рекомендуем использовать SameSite следующим образом: установить для файлов cookie, влияющих на отображение веб-сайта, значение Lax , а для файлов cookie, связанных с действиями пользователя, — значение Strict .
Вы также можете установить SameSite в None , чтобы указать, что хотите, чтобы cookie-файл отправлялся во всех контекстах. Если вы предоставляете услугу, которую используют другие сайты, например, виджеты, встроенный контент, партнерские программы, реклама или вход в систему на нескольких сайтах, используйте None , чтобы ваше намерение было понятным.

None , Lax или Strict . Изменения в поведении по умолчанию без SameSite.
Browser Support
Атрибут SameSite широко поддерживается, но не получил широкого распространения. В прошлом установка куки без SameSite по умолчанию приводила к их отправке во всех контекстах, что делало пользователей уязвимыми для CSRF-атак и непреднамеренной утечки информации. Чтобы побудить разработчиков заявлять о своих намерениях и обеспечить пользователям более безопасный опыт, предложение IETF « Incrementally Better Cookies» (Постепенно улучшающие куки) предусматривает два ключевых изменения:
- Файлы cookie без атрибута
SameSiteобрабатываются какSameSite=Lax. - Файлы cookie с
SameSite=Noneтакже должны содержать параметрSecure, что означает, что им необходим безопасный контекст.
Оба эти изменения обратно совместимы с браузерами, которые корректно реализовали предыдущую версию атрибута SameSite , а также с браузерами, которые не поддерживают более ранние версии SameSite . Они призваны уменьшить зависимость разработчиков от поведения браузеров по умолчанию, сделав поведение и предполагаемое использование файлов cookie явными. Любые клиенты, которые не распознают SameSite=None должны игнорировать это значение.
SameSite=Lax по умолчанию
Если вы отправляете cookie-файл, не указывая атрибут SameSite , браузер будет рассматривать этот cookie-файл так, как если бы для него было установлено значение SameSite=Lax . Тем не менее, мы рекомендуем явно указывать SameSite=Lax для обеспечения большей согласованности пользовательского опыта во всех браузерах.
SameSite=None должен быть защищенным
При создании межсайтовых файлов cookie с использованием SameSite=None необходимо также установить для них значение Secure , чтобы браузер мог их принимать:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Проверить это поведение можно в Chrome версии 76, включив about://flags/#cookies-without-same-site-must-be-secure , а в Firefox версии 69 — установив параметр network.cookie.sameSite.noneRequiresSecure в about:config .
Мы также рекомендуем как можно скорее обновить существующие файлы cookie до Secure . Если вы используете на своем сайте сервисы, предоставляющие контент третьих лиц, убедитесь, что ваш поставщик услуг обновил свои файлы cookie, а также обновите все фрагменты кода или зависимости на вашем сайте, чтобы обеспечить использование нового поведения.
Рецепты печенья SameSite
Для получения более подробной информации об обновлении файлов cookie для успешной обработки этих изменений параметра SameSite=None и различий в поведении браузеров см. следующую статью: Рецепты использования файлов cookie SameSite .
Выражаем искреннюю благодарность за вклад и отзывы Лили Чен, Мальте Ублу, Майку Весту, Робу Додсону, Тому Штайнеру и Вивеку Сехару.
Изображение героя печенья от Пилле-Риин Приске на Unsplash