Разрешить разработчикам включать файлы cookie в «разделенное» хранилище с отдельной банкой файлов cookie для каждого сайта верхнего уровня.
Статус реализации
- Поддерживается по умолчанию в Chrome 114 и более поздних версиях .
- Исходная пробная версия, уже завершенная, была доступна для Chrome 100–116.
- Прочтите « Намерение экспериментировать» и «Намерение отправить» .
Что такое ЧИПС?
Файлы cookie с независимым разделенным состоянием (CHIPS) позволяют разработчикам размещать файлы cookie в разделенном хранилище с отдельными банками файлов cookie для каждого сайта верхнего уровня, что повышает конфиденциальность и безопасность пользователей.
Без разделения сторонние файлы cookie могут позволить службам отслеживать пользователей и объединять их информацию со многих несвязанных сайтов верхнего уровня. Это известно как межсайтовое отслеживание.
Браузеры постепенно отказываются от неразделенных сторонних файлов cookie, поэтому CHIPS, API доступа к хранилищу и наборы связанных веб-сайтов будут единственным способом чтения и записи файлов cookie из межсайтового контекста, такого как iframe, когда сторонние файлы cookie заблокированы.
![Диаграмма, показывающая, как файлы cookie могут использоваться двумя разными веб-сайтами.](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/without-cookie-partitioni-bb0cbbf0c63d.png?authuser=0&hl=ru)
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 для этого стороннего поставщика.](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/with-cookie-partitioning-d3df97804f836.png?authuser=0&hl=ru)
При использовании разделенных файлов cookie, когда пользователь посещает сайт A и встроенный контент с сайта C устанавливает файл cookie с атрибутом Partitioned, файл cookie сохраняется в разделенном банке, предназначенном только для файлов cookie, которые сайт C устанавливает при внедрении на сайт A. Браузер будет отправлять этот файл cookie только в том случае, если сайт верхнего уровня имеет номер A.
Когда пользователь посещает новый сайт, например сайт B, встроенный фрейм C не получит файл cookie, который был установлен, когда C был встроен в сайт A.
Если пользователь посещает сайт C как веб-сайт верхнего уровня, секционированный файл cookie, который C установил при внедрении в A, также не будет отправлен в этом запросе.
![Диаграмма, показывающая, что файлы cookie не передаются, если один и тот же сторонний файл встроен на два разных веб-сайта.](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/with-cookie-partitioning-a19ff8bdd6d0d.png?authuser=0&hl=ru)
Варианты использования
Например, сайт retail.example
может захотеть сотрудничать со сторонней службой support.chat.example
, чтобы встроить на свой сайт окно чата поддержки. Многие встраиваемые чат-сервисы сегодня используют файлы cookie для сохранения состояния.
![Диаграмма, показывающая веб-сайт со встроенным виджетом чата](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/top-level-site-retailexa-b1bf622bc028e.png?authuser=0&hl=ru)
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 для своих запросов.
- Встроенные объявления, для которых требуется ограничение по состоянию на каждого издателя (например, сбор рекламных предпочтений пользователей для этого веб-сайта).
Почему CHIPS использует модель разделения по выбору
Поскольку браузеры постепенно отказываются от неразделенных сторонних файлов cookie, были предприняты попытки использовать несколько других подходов к секционированию.
Firefox объявил, что они по умолчанию разделяют все сторонние файлы cookie в строгом режиме ETP и режиме частного просмотра, поэтому все межсайтовые файлы 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.
![Сайт A и встроенный сайт C используют разделенный файл cookie. Если сайт C не встроен, он не может получить доступ к секционированному файлу cookie.](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/site-and-embedded-site-b6ea4419a367f.png?authuser=0&hl=ru)
До ЧИПОВ
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.
Рассмотрите API доступа к хранилищу и связанные наборы веб-сайтов в ситуациях, когда вам нужно, чтобы один и тот же файл cookie был доступен службе, встроенной в несколько связанных сайтов.
CHIPS предоставляет службе возможность действовать как изолированный компонент на нескольких сайтах, при этом один и тот же файл cookie не обязательно должен быть доступен на нескольких сайтах. Если служба устанавливает секционированный файл cookie, его ключом раздела будет сайт верхнего уровня, и этот файл cookie не будет доступен другим сайтам, также использующим эту службу.
Дизайн наборов связанных веб-сайтов основан на API доступа к хранилищу и не интегрируется с секционированием CHIPS. Если у вас есть вариант использования, основанный на общем разделе файлов cookie на сайтах в RWS, вы можете предоставить примеры и отзывы по проблеме GitHub .
Демо
В этой демонстрации вы узнаете, как работают разделенные файлы cookie и как их можно проверить в DevTools.
Сайт A встраивает iframe с сайта B, который использует JavaScript для установки двух файлов cookie: разделенного и неразделенного файла cookie. Сайт B отображает все файлы cookie, доступные из этого места, с помощью document.cookie
.
Когда сторонние файлы cookie заблокированы, сайт Б сможет устанавливать файлы cookie и получать к ним доступ только с атрибутом Partitioned
в межсайтовом контексте.
Если сторонние файлы cookie разрешены, сайт Б также может установить и получить доступ к неразделенным файлам cookie.
![Сайт А и сайт Б](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/3p-cookies-blocked-and-not-blocked.png?authuser=0&hl=ru)
Предварительные условия
- 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 из выбранного источника.
![](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/QcTVEgWjGYQZJtMX0g4a.png?authuser=0&hl=ru)
Сайт Б может устанавливать секционированный файл cookie только в межсайтовом контексте, несекционированный файл cookie будет заблокирован:
- Вы должны увидеть
__Host-partitioned-cookie
с ключом раздела сайта верхнего уровняhttps://chips-site-a.glitch.me
.
![](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/DvSAMie7T41SFBY7wUrc.png?authuser=0&hl=ru)
- Нажмите Перейти на сайт Б.
- В DevTools перейдите в «Приложение» > «Хранилище» > «Файлы cookie» .
- Нажмите
https://chips-site-b.glitch.me
.
![Сайт Б](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/site-b.png?authuser=0&hl=ru)
В этом сценарии, поскольку вы находитесь на сайте B в контексте верхнего уровня, он может устанавливать оба файла cookie и получать к ним доступ:
-
unpartitioned-cookie
имеет пустой ключ раздела. - __Файл cookie
__Host-partitioned-cookie
имеет ключ разделаhttps://chips-site-b.glitch.me
.
![](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/vl4ouXXVqQ1bB5dEP4iK.png?authuser=0&hl=ru)
Если вы вернетесь на сайт А, unpartitioned-cookie
теперь будет храниться в браузере, но он не будет доступен с сайта А.
- Нажмите Перейти на сайт А.
- Откройте вкладку Сеть .
- Нажмите
https://chips-site-b.glitch.me
. - Откройте вкладку «Файлы cookie» .
Находясь на сайте A, вы должны увидеть __Host-partitioned-cookie
с ключом раздела сайта верхнего уровня https://chips-site-a.glitch.me
.
![](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/223LlvPnqtMPoEjMASht.png?authuser=0&hl=ru)
Если вы установите флажок «Показать отфильтрованные запросы файлов cookie», DevTools покажет, что неразделенный файл cookie заблокирован, выделен желтым цветом и подсказкой: «Этот файл cookie был заблокирован из-за предпочтений пользователя» .
![](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/a4jDguCgbwt9D5RB5Q6r.png?authuser=0&hl=ru)
В разделе «Приложение» > «Хранилище» > «Файлы cookie» при нажатии на https://chips-site-b.glitch.me
отобразится:
-
unpartitioned-cookie
с пустым ключом раздела. - __Cookie-файл
__Host-partitioned-cookie
с ключом разделаhttps://chips-site-a.glitch.me
.
![](https://google-developers.gonglchuangl.net/static/privacy-sandbox/assets/images/tv3pAAoTktiX3nZdIUIh.png?authuser=0&hl=ru)
__Host-partitioned-cookie
имеет ключ раздела https://chips-site-a.glitch.me
. unpartitioned-cookie
отображается, но он недоступен для iframe сайта B, если он встроен в сайт A.Очистить файлы cookie
Чтобы сбросить демо-версию, удалите все файлы cookie сайта:
- Нажмите
Control+Shift+J
(илиCommand+Option+J
на Mac), чтобы открыть DevTools. - Откройте вкладку «Приложение» .
- Перейдите в Приложение > Хранилище > Файлы cookie .
- Щелкните правой кнопкой мыши
https://chips-site-b.glitch.me
. - Нажмите Очистить .
Ресурсы
- GitHub : читайте пояснение , задавайте вопросы и следите за обсуждением .
- Поддержка разработчиков : задавайте вопросы и присоединяйтесь к обсуждениям в репозитории поддержки разработчиков Privacy Sandbox .