Разрешить разработчикам выбирать «разделенное» хранилище cookie-файлов, с отдельным хранилищем cookie-файлов для каждого сайта верхнего уровня.
Статус реализации
- Поддерживается по умолчанию в Chrome 114 и более поздних версиях .
- Исходная пробная версия, уже завершенная, была доступна для Chrome 100–116.
- Прочтите « Намерение экспериментировать» и «Намерение отправить» .
Что такое ЧИПСЫ?
Файлы cookie с независимым разделением (CHIPS) позволяют разработчикам помещать файлы cookie в раздельное хранилище с отдельными хранилищами файлов cookie для каждого сайта верхнего уровня, что повышает конфиденциальность и безопасность пользователей.
Без разделения сторонние файлы cookie позволяют сервисам отслеживать пользователей и объединять их информацию с множества несвязанных сайтов верхнего уровня. Это называется межсайтовым отслеживанием.
CHIPS, API доступа к хранилищу и наборы связанных веб-сайтов — это единственный способ читать и записывать файлы cookie из межсайтовых контекстов, таких как iframes, когда сторонние файлы cookie заблокированы.

CHIPS представляет новый атрибут cookie-файлов Partitioned
для поддержки межсайтовых cookie-файлов, которые разделены по контексту верхнего уровня.
Заголовок Set-Cookie:
Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;
Javascript:
document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"
Разделённый сторонний cookie-файл привязан к сайту верхнего уровня, где он изначально установлен, и недоступен извне. Таким образом, cookie-файлы, установленные сторонним сервисом, можно прочитать только в том же встроенном контексте сайта верхнего уровня, где они были изначально установлены.

При использовании секционированных файлов cookie, когда пользователь посещает сайт A и встроенный контент с сайта C устанавливает файл cookie с атрибутом Partitioned, файл cookie сохраняется в секционированном JAR-файле, предназначенном только для файлов cookie, которые устанавливает сайт C при его внедрении на сайт A. Браузер отправит этот файл cookie только в том случае, если сайт верхнего уровня — A.
Когда пользователь посещает новый сайт, например, сайт B, встроенный фрейм C не получит cookie-файл, который был установлен при встраивании C на сайт A.
Если пользователь посещает сайт C как веб-сайт верхнего уровня, то секционированный файл cookie, который C установил при внедрении в A, также не будет отправлен в этом запросе.

Варианты использования
Например, сайт retail.example
может захотеть воспользоваться услугами стороннего сервиса support.chat.example
для встраивания чата поддержки на свой сайт. Многие современные встраиваемые чат-сервисы используют файлы cookie для сохранения состояния.

support.chat.example
. Без возможности установки межсайтового cookie-файла support.chat.example
пришлось бы искать альтернативные, зачастую более сложные, методы хранения состояния. В противном случае, его пришлось бы встроить в страницу верхнего уровня, что создаёт риски, поскольку позволяет скрипту support.chat.example
иметь повышенные привилегии на retail.example, например, доступ к cookie-файлам аутентификации.
CHIPS предоставляет более простой вариант продолжения использования межсайтовых cookie-файлов без рисков, связанных с неразделенными cookie-файлами.
Примерами вариантов использования CHIPS являются любые сценарии, в которых для межсайтовых подресурсов требуется некоторое понятие сеанса или постоянного состояния, ограниченное активностью пользователя на одном сайте верхнего уровня, например:
- Встроенные чаты сторонних разработчиков
- Встраивание сторонних карт
- Встроенные сторонние платежи
- Балансировка нагрузки CDN подресурсов
- Поставщики Headless CMS
- Домены-песочницы для обслуживания ненадежного пользовательского контента (например, googleusercontent.com и githubusercontent.com)
- Сторонние CDN, которые используют файлы cookie для обслуживания контента, доступ к которому контролируется статусом аутентификации на основном сайте (например, фотографии профилей на сайтах социальных сетей, размещенных на сторонних CDN)
- Фронтенд-фреймворки, которые полагаются на удаленные API, использующие файлы cookie в своих запросах
- Встроенные рекламные объявления, для которых необходимо настроить область действия для каждого издателя (например, сбор данных о предпочтениях пользователей в отношении рекламы на данном веб-сайте)
Почему CHIPS использует модель добровольного разбиения
В случае, когда доступ к неразделенным сторонним cookie-файлам блокируется, были предприняты попытки использовать несколько других подходов к разделению.
Firefox объявил, что по умолчанию разделяет все сторонние файлы cookie в режиме ETP Strict и режиме приватного просмотра, поэтому все межсайтовые файлы cookie разделяются по сайту верхнего уровня. Однако разделение файлов cookie без согласия сторонних сервисов может привести к непредвиденным ошибкам, поскольку некоторые сторонние сервисы используют серверы, которые ожидают неразделённые сторонние файлы cookie.
Ранее Safari пытался разбивать файлы cookie на части на основе эвристики , но в итоге решил полностью их заблокировать, сославшись на путаницу среди разработчиков в качестве одной из причин. Недавно Safari выразил интерес к модели, основанной на добровольном участии .
Отличительной особенностью CHIPS от существующих реализаций секционированных файлов cookie является возможность согласия третьих лиц. Файлы cookie должны быть настроены с новым атрибутом для отправки по межсторонним запросам после того, как (несекционированные) сторонние файлы cookie устареют.
Хотя сторонние файлы cookie всё ещё существуют, атрибут Partitioned
позволяет выбрать более строгий и безопасный тип поведения файлов cookie. CHIPS — важный шаг, который поможет сервисам плавно перейти к будущему без сторонних файлов cookie.
Технический проект разделения файлов cookie
Сегодня файлы cookie привязаны к имени хоста или домену сайта, который их установил, то есть к их ключу хоста .
Например, для файлов cookie с https://support.chat.example
ключ хоста — ("support.chat.example")
.
В рамках CHIPS файлы cookie, в которых выбрано разделение, будут иметь двойной ключ — ключ хоста и ключ раздела .
Ключ раздела cookie-файла — это сайт ( схема и регистрируемый домен ) URL-адреса верхнего уровня, который браузер посещал в начале запроса к конечной точке, установившей cookie-файл.
В приведенном выше примере, где https://support.chat.example
встроен в https://retail.example
, URL-адрес верхнего уровня — https://retail.example
.
Ключом раздела в этом случае будет ("https", "retail.example")
.
Аналогично, ключ раздела запроса — это адрес URL верхнего уровня, который браузер посещает в начале запроса. Браузеры должны отправлять cookie-файл с атрибутом Partitioned
только в запросах с тем же ключом раздела, что и у этого cookie-файла.
Вот как выглядит ключ cookie в предыдущем примере до и после CHIPS.

До появления ЧИПСОВ
key=("support.chat.example")
После ЧИПСОВ
key={("support.chat.example"),("https", "retail.example")}
Проектирование безопасности
В целях поощрения надлежащих практик обеспечения безопасности при использовании CHIPS файлы cookie устанавливаются и отправляются только по защищенным протоколам.
- Разделенные файлы cookie должны быть установлены с помощью
Secure
. - При настройке разделенных cookie-файлов рекомендуется использовать префикс
__Host-
, чтобы привязать их к имени хоста (а не к регистрируемому домену).
Пример:
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;
Альтернативы ЧИПСАМ
API доступа к хранилищу и связанные с ним наборы связанных веб-сайтов (RWS) представляют собой механизмы веб-платформы, позволяющие обеспечить ограниченный межсайтовый доступ к файлам cookie для конкретных целей, с которыми сталкивается пользователь.
Это альтернативы разделению CHIPS, где требуется доступ к межсайтовым неразделенным файлам cookie.
Рассмотрите API-интерфейс доступа к хранилищу и связанные с ним наборы веб-сайтов в ситуациях, когда вам необходимо, чтобы один и тот же файл cookie был доступен для службы, встроенной в несколько связанных сайтов.
CHIPS позволяет сервису действовать как изолированный компонент на нескольких сайтах, при этом один и тот же файл cookie не обязательно должен быть доступен на нескольких сайтах. Если сервис устанавливает секционированный файл cookie, его ключом секционирования будет сайт верхнего уровня, и этот файл cookie не будет доступен другим сайтам, также использующим этот сервис.
Дизайн связанных наборов веб-сайтов основан на API доступа к хранилищу и не интегрируется с разделением CHIPS. Если у вас есть вариант использования, требующий общего раздела cookie для разных сайтов в рамках RWS, вы можете предоставить примеры и отзывы в GitHub .
Демо
В этой демонстрации вы узнаете, как работают разделенные файлы cookie и как их можно проверить в DevTools.
Сайт A встраивает iframe с сайта B, который использует JavaScript для установки двух файлов cookie: секционированного и несекционированного. Сайт B отображает все файлы cookie, доступные из этого местоположения, с помощью document.cookie
.
Если сторонние файлы cookie заблокированы, сайт B сможет устанавливать и получать доступ к файлам cookie только с атрибутом Partitioned
в межсайтовом контексте.
Если сторонние файлы cookie разрешены, сайт B также может устанавливать и получать доступ к неразделенным файлам cookie.

Предпосылки
- Chrome 118 или выше.
- Перейдите на
chrome://flags/#test-third-party-cookie-phaseout
и включите этот параметр.
Используйте DevTools для проверки разделенных файлов cookie
- Посетите https://chips-site-a.glitch.me .
- Нажмите
Control+Shift+J
(илиCommand+Option+J
на Mac), чтобы открыть DevTools. - Откройте вкладку «Приложение» .
- Перейдите в Приложение > Хранилище > Файлы cookie .
- Нажмите
https://chips-site-b.glitch.me
.
DevTools отобразит все файлы cookie из выбранного источника.

Сайт B может устанавливать только секционированный cookie-файл в межсайтовом контексте, несекционированный cookie-файл будет заблокирован:
- Вы должны увидеть
__Host-partitioned-cookie
с ключом раздела сайта верхнего уровняhttps://chips-site-a.glitch.me
.

- Нажмите « Перейти на сайт B» .
- В DevTools перейдите в Application > Storage > Cookies .
- Нажмите
https://chips-site-b.glitch.me
.

В этом сценарии, поскольку вы находитесь на сайте B в контексте верхнего уровня, он может установить и получить доступ к обоим файлам cookie:
-
unpartitioned-cookie
имеет пустой ключ раздела. -
__Host-partitioned-cookie
cookie имеет ключ разделаhttps://chips-site-b.glitch.me
.

Если вы вернетесь на сайт А, unpartitioned-cookie
теперь будет сохранен в браузере, но он не будет доступен с сайта А.
- Нажмите « Перейти на сайт А» .
- Откройте вкладку Сеть .
- Нажмите
https://chips-site-b.glitch.me
. - Откройте вкладку «Файлы cookie» .
Находясь на сайте A, вы должны увидеть __Host-partitioned-cookie
с ключом раздела сайта верхнего уровня https://chips-site-a.glitch.me
.

Если вы установите флажок «Показывать отфильтрованные запросы cookie», DevTools покажет, что неразделенный cookie-файл заблокирован, выделив его желтым цветом, и сообщит: «Этот cookie-файл был заблокирован из-за настроек пользователя» .

В разделе Приложение > Хранилище > Файлы cookie при нажатии на https://chips-site-b.glitch.me
отобразится следующее:
-
unpartitioned-cookie
с пустым ключом раздела. -
__Host-partitioned-cookie
cookie с ключом разделаhttps://chips-site-a.glitch.me
.

__Host-partitioned-cookie
имеет ключ раздела https://chips-site-a.glitch.me
. unpartitioned-cookie
отображается, но он недоступен для iframe сайта B, если он встроен на сайт A.Очистить куки
Чтобы сбросить демоверсию, очистите все файлы cookie для сайта:
- Нажмите
Control+Shift+J
(илиCommand+Option+J
на Mac), чтобы открыть DevTools. - Откройте вкладку «Приложение» .
- Перейдите в Приложение > Хранилище > Файлы cookie .
- Щелкните правой кнопкой мыши по
https://chips-site-b.glitch.me
. - Нажмите «Очистить» .
Ресурсы
- GitHub : прочитайте пояснение , задайте вопросы и следите за обсуждением .
- Поддержка разработчиков : задавайте вопросы и присоединяйтесь к обсуждениям в репозитории Privacy Sandbox Developer Support .