SameSite (cookie)

SameSite – атрибут заголовка Set-Cookie, определяющий, отправит ли браузер cookie в межсайтовом запросе. Значения: Strict, Lax и None; без атрибута Chrome с версии 80 (февраль 2020) применяет Lax по умолчанию.

4 минуты чтения

SameSite появился как расширение спецификации cookie в 2016 году и решает конкретную проблему: исторически браузер отправлял cookie при каждом запросе к её домену – в том числе когда запрос уходил со стороннего сайта через картинку, скрипт или iframe. Этим пользовались и CSRF-атаки, и межсайтовый трекинг. Атрибут в заголовке Set-Cookie позволяет серверу явно указать, в каких межсайтовых сценариях браузеру можно передавать cookie, а в каких – нет. SameSite – механизм чисто технический; юридическая сторона использования cookie – персональные данные, политика конфиденциальности и 152-ФЗ – разобрана в отдельных терминах глоссария.

Как это работает

Сервер задаёт атрибут при установке cookie: Set-Cookie: sessionid=38afes7a8; SameSite=Lax. Дальше при каждом запросе браузер сравнивает сайт, открытый в адресной строке, с сайтом, которому принадлежит cookie, и по значению атрибута решает, отправлять её или нет.

ЗначениеКогда cookie отправляетсяТиповой сценарий
StrictТолько в same-site запросах. Даже при переходе по внешней ссылке cookie в первом запросе не уйдётАнти-CSRF-токены, админские и банковские сессии
LaxSame-site запросы плюс межсайтовая навигация верхнего уровня безопасным методом (GET/HEAD/OPTIONS). Не отправляется из fetch(), <img>, <script>, iframe и POST-форм с чужого сайтаСессионные cookie большинства сайтов; значение по умолчанию
NoneВо всех контекстах, включая межсайтовые, – но только вместе с атрибутом Secure (HTTPS). Без Secure браузер отклонит cookieВстраиваемые виджеты, iframe, SSO, аналитические и рекламные пиксели

Если атрибут не указан, современные браузеры трактуют cookie как SameSite=Lax – Chrome перешёл на этот дефолт с версии 80 в феврале 2020 года, тогда же None без Secure стал отклоняться.

У дефолтного Lax есть смягчение – «двухминутное» исключение: cookie, установленная не более двух минут назад, всё же отправится в межсайтовом POST-запросе верхнего уровня. Оно придумано ради платёжных редиректов вроде 3-D Secure и SSO-сценариев, где внешний сервис возвращает пользователя на сайт POST-формой. Важно: окно действует только для cookie без атрибута; явно заданный SameSite=Lax блокирует такую отправку всегда.

Same-site и same-origin – в чём разница

SameSite сравнивает не origin, а site. По определению MDN site – это схема плюс регистрируемый домен (eTLD+1); порт не учитывается. Origin строже: схема, полный хост и порт целиком.

СлучайПримерSame-originSame-site
Поддоменыwww.example.com и static.example.comНетДа – один eTLD+1
Схемаhttp:// и https:// одного доменаНетНет – схема входит в определение site
Портexample.com и example.com:8443НетДа – порт не учитывается
Public Suffix Lista.github.io и b.github.ioНетНет – github.io в списке публичных суффиксов

Зачем это нужно

Главная задача SameSite – защита от CSRF, подделки межсайтовых запросов. Классическая атака: жертва залогинена на сайте, злоумышленник заманивает её на свою страницу, и та отправляет скрытую POST-форму на уязвимый сайт – раньше браузер прикладывал к такому запросу cookie жертвы, и действие выполнялось от её имени. Lax отсекает этот основной вектор, Strict дополнительно закрывает переходы по ссылкам. При этом SameSite – дополнительный барьер, а не замена CSRF-токенам: он не спасает от атак с того же сайта, от GET-эндпоинтов с побочными эффектами и от двухминутного окна.

На практике с атрибутом сталкиваются не только при защите форм:

  • Авторизация в iframe – личный кабинет или виджет, встроенный на чужой сайт, «разлогинивается»: cookie со Strict или Lax во вложенный межсайтовый iframe не отправляются, и сервер не видит сессию. Нужен SameSite=None; Secure.
  • Счётчики и пиксели – Метрика, рекламные пиксели и инструменты сквозной аналитики работают в стороннем контексте, поэтому их межсайтовым cookie требуется None. Разметка ссылок UTM-метками от cookie не зависит и потому остаётся самым живучим способом передать источник перехода.
  • Платежи и SSO – возврат POST-запросом с внешнего сервиса не донесёт явную Lax-cookie: сессию для таких редиректов выносят в отдельную cookie с None; Secure.

Для встраиваемого контента в 2026 голый None – уже не лучшая практика. Рекомендация – добавлять атрибут Partitioned (технология CHIPS): такая cookie получает двойной ключ «домен-установщик + сайт верхнего уровня», виджет хранит состояние на каждом сайте-хозяине отдельно, а межсайтовый трекинг через неё невозможен. С декабря 2025 CHIPS входит в Baseline и работает во всех современных браузерах.

Пример

Четыре типовых заголовка (синтаксис сверен с документацией MDN и web.dev):

Set-Cookie: sessionid=38afes7a8; SameSite=Strict
Set-Cookie: sessionid=38afes7a8; SameSite=Lax
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

Первая строка – анти-CSRF-токен или админская сессия, вторая – обычная пользовательская сессия, третья – cookie встраиваемого виджета, четвёртая – современный вариант той же виджетной cookie: CHIPS с рекомендованным префиксом __Host-. В PHP начиная с версии 7.3 атрибут задаётся через массив опций:

setcookie('name', 'value', ['samesite' => 'Lax', 'secure' => true]);

Рядом с SameSite постоянно всплывает вопрос о судьбе сторонних cookie – и в русскоязычных материалах чаще всего висит застрявшая в 2019 году картина «Chrome вот-вот всё отключит». Актуальный статус на 2026 другой. Chrome сторонние cookie не отключил: в апреле 2025 Google отказался от идеи отдельного запроса на выбор, а 17 октября 2025 в блоге Privacy Sandbox официально подтвердил, что Chrome сохраняет текущий подход – сторонние cookie включены по умолчанию, отключить их можно в настройках. Одновременно Google свернул десять технологий Privacy Sandbox (Topics, Protected Audience, Attribution Reporting API и другие); в развитии остались CHIPS, FedCM и Private State Tokens. Safari при этом полностью блокирует сторонние cookie ещё с 2020 года, а Firefox по умолчанию их партиционирует через Total Cookie Protection. По оценкам consent-платформ, на браузеры без «обычных» сторонних cookie приходится порядка 17–20% трафика – цифра оценочная, но порядок величины ясен: виджеты и трекинг нужно проектировать с расчётом на None плюс Partitioned, не полагаясь на сторонние cookie как на данность.

Частые вопросы

Что будет, если вообще не указать атрибут SameSite?

Современные браузеры, начиная с Chrome 80 (февраль 2020), трактуют такую cookie как SameSite=Lax. При этом действует смягчение: cookie моложе двух минут ещё отправляется в межсайтовом POST-запросе верхнего уровня. Полагаться на дефолт не стоит – явно заданное значение ведёт себя предсказуемее в разных браузерах.

Чем SameSite=Lax отличается от Strict и что ставить для сессии?

Lax отправляет cookie при переходе на сайт по внешней ссылке (top-level навигация методом GET), Strict – нет: после клика по ссылке из письма или мессенджера пользователь выглядит разлогиненным. Поэтому типовая схема – сессионная cookie с Lax, а анти-CSRF-токен или админская сессия – со Strict.

Почему SameSite=None не работает без HTTPS?

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

Почему в iframe слетает авторизация?

Встроенный на чужой сайт iframe – межсайтовый контекст, и cookie со Strict или Lax браузер туда не отправляет: сервер не видит сессию и считает пользователя гостем. Решение – выдавать такой cookie с SameSite=None; Secure, а лучше добавить Partitioned (CHIPS): Safari и Firefox сторонние cookie блокируют или партиционируют, и голый None там не поможет.

Почему ломается оплата через 3-D Secure или вход по SSO с возвратом POST-запросом?

Возврат с платёжного шлюза или провайдера SSO – это межсайтовый POST, и явно заданная Lax-cookie с ним не отправится: сайт «забывает» пользователя посреди оплаты. Chrome даёт двухминутное окно, но только для cookie без атрибута. Решения: для участвующей в редиректе cookie ставить None; Secure либо переводить возврат на GET-редирект.

SameSite заменяет CSRF-токены?

Нет. SameSite не защищает от атак с того же сайта (например, с поддомена), от GET-эндпоинтов с побочными эффектами и от запросов в двухминутном окне дефолтного Lax. Правильная схема – SameSite как дополнительный барьер плюс классическая CSRF-токенизация форм.

Chrome отключил сторонние cookie или нет?

Нет. В апреле 2025 Google отказался от отдельного запроса выбора, а 17 октября 2025 официально подтвердил в блоге Privacy Sandbox, что Chrome сохраняет текущий подход: сторонние cookie включены по умолчанию, пользователь может отключить их в настройках. При этом Safari блокирует их полностью с 2020 года, а Firefox партиционирует через Total Cookie Protection, так что рассчитывать на сторонние cookie во всех браузерах всё равно нельзя.

Материалы по теме

Валентина Меланина

Нужна консультация?

Разберу ваш сайт и покажу точки роста

Если хотите понять, как этот термин применить к вашему проекту — начнём с аудита.