Предоставьте разработчикам возможность устанавливать cookie-файлы в "разделенное" хранилище, с отдельным хранилищем cookie-файлов для каждого сайта верхнего уровня.
Статус реализации
- Поддерживается по умолчанию в Chrome 114 и более поздних версиях .
- Исходная пробная версия, уже завершенная, была доступна для Chrome 100–116.
- Прочтите « Намерение экспериментировать» и «Намерение отправить» .
Что такое CHIPS?
Технология CHIPS (Cookies Having Independent Partitioned State) позволяет разработчикам размещать файлы cookie в разделенном хранилище, с отдельными хранилищами для файлов cookie на каждом сайте верхнего уровня, что повышает конфиденциальность и безопасность пользователей.
Без разделения на разделы, сторонние файлы cookie могут позволять сервисам отслеживать пользователей и объединять их информацию со множества несвязанных сайтов верхнего уровня. Это называется межсайтовым отслеживанием.
CHIPS, API доступа к хранилищу и связанные наборы веб-сайтов — это единственный способ читать и записывать файлы cookie из межсайтовых контекстов, таких как iframe, когда сторонние файлы 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 сохраняется в секционированном хранилище, предназначенном только для файлов 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 подресурсов
- Поставщики безголовых CMS
- Песочницы для показа ненадежного пользовательского контента (например, googleusercontent.com и githubusercontent.com)
- Сторонние CDN-сети, использующие файлы cookie для предоставления контента, доступ к которому контролируется статусом аутентификации на сайте первого уровня (например, фотографии профилей в социальных сетях, размещенных на сторонних CDN-сетях).
- Фронтенд-фреймворки, использующие удалённые API и применяющие файлы cookie к своим запросам, — это фреймворки, работающие с различными API.
- Встроенная реклама, для которой необходимо задать параметры состояния для каждого издателя (например, для учета предпочтений пользователей в отношении рекламы на данном веб-сайте).
Почему CHIPS использует модель разделения данных с возможностью выбора варианта участия
В случаях, когда доступ к неразделенным сторонним файлам cookie заблокирован, были предприняты несколько других подходов к разделению данных.
Firefox объявил, что по умолчанию в режиме ETP Strict и режиме приватного просмотра все сторонние файлы cookie разделяются по сайтам верхнего уровня. Однако разделение файлов cookie без согласия третьих лиц может привести к неожиданным ошибкам, поскольку некоторые сторонние сервисы создали серверы, которые ожидают неразделённые сторонние файлы cookie.
Ранее Safari пытался разделять файлы cookie на основе эвристических алгоритмов , но в итоге решил полностью их заблокировать, сославшись на путаницу среди разработчиков как на одну из причин. Недавно Safari выразил заинтересованность в модели, основанной на добровольном согласии пользователей .
Отличительной особенностью CHIPS от существующих реализаций разделенных файлов 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. - Рекомендуется использовать префикс
__Host-при настройке секционированных файлов cookie, чтобы привязать их к имени хоста (а не к регистрируемому домену).
Пример:
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;
Альтернативы чипсам
API доступа к хранилищу и связанные с ним наборы связанных веб-сайтов (RWS) — это механизмы веб-платформы, позволяющие обеспечить ограниченный доступ к файлам cookie между сайтами для конкретных целей, ориентированных на пользователя.
Это альтернатива разделению CHIPS в тех случаях, когда требуется доступ к неразделенным файлам cookie, используемым на разных сайтах.
В ситуациях, когда вам необходимо, чтобы один и тот же cookie-файл был доступен для сервиса, встроенного в несколько связанных сайтов, следует рассмотреть API доступа к хранилищу и наборы связанных веб-сайтов.
CHIPS предоставляет сервису возможность работать в качестве изолированного компонента на нескольких площадках, при этом один и тот же cookie-файл не обязательно должен быть доступен на разных площадках. Если сервис устанавливает секционированный cookie-файл, его ключом разделения будет площадка верхнего уровня, и этот cookie-файл не будет доступен другим площадкам, также использующим этот сервис.
В основе архитектуры Related Website Sets лежит API доступа к хранилищу, и она не интегрируется с системой разделения CHIPS. Если у вас есть сценарий использования, в котором используется общий раздел cookie для всех сайтов в рамках RWS, вы можете предоставить примеры и отзывы в соответствующем разделе GitHub .
Демо
В этой демонстрации вы узнаете, как работают разделенные на разделы файлы cookie и как их можно просмотреть в инструментах разработчика.
Сайт 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), чтобы открыть инструменты разработчика. - Нажмите вкладку «Приложение» .
- Перейдите в раздел Приложения > Хранилище > Файлы cookie .
- Перейдите по ссылке
https://chips-site-b.glitch.me.
Инструменты разработчика отобразят все файлы cookie из выбранного источника.

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

- Нажмите « Перейти на сайт B» .
- В инструментах разработчика перейдите в раздел «Приложение» > «Хранилище» > «Cookies» .
- Перейдите по ссылке
https://chips-site-b.glitch.me.

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

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

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

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

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