Каждый файл 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
позволяет браузеру отправлять куки с этими навигациями верхнего уровня. Например, если другой сайт ссылается на контент вашего сайта, в данном случае используя фотографию вашего кота и предоставляя ссылку на вашу статью следующим образом:
<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
для блога другого человека, ваш сайт не отправляет куки. Однако, когда читатель переходит по ссылке на cat.html
на вашем сайте, этот запрос включает куки.
Мы рекомендуем использовать SameSite
именно таким образом, установив для файлов cookie, влияющих на отображение веб-сайта, значение Lax
, а для файлов cookie, связанных с действиями пользователя, — значение Strict
.
Вы также можете установить SameSite
на None
, чтобы указать, что вы хотите, чтобы cookie отправлялся во всех контекстах. Если вы предоставляете услугу, которую используют другие сайты, например, виджеты, встроенный контент, партнерские программы, рекламу или вход на нескольких сайтах, используйте None
, чтобы убедиться, что ваши намерения ясны.

None
, Lax
или Strict
. Изменения поведения по умолчанию без SameSite
Browser Support
Атрибут SameSite
широко поддерживается, но не был широко принят. В прошлом установка файлов cookie без 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