Permitir que os desenvolvedores ativem um cookie em "particionado" armazenamento, com um cookie jar separado por site de nível superior.
Status da implementação
- Compatível por padrão no Chrome 114 e em versões mais recentes.
- Um teste de origem, concluído, estava disponível do Chrome 100 a 116.
- Leia Intent de experimento e Intent de envio.
O que são CHIPS?
Com os cookies com estado particionado independente (CHIPS), os desenvolvedores podem ativar um cookie no armazenamento particionado, com jars de cookies separados por site de nível superior, melhorando a privacidade e a segurança do usuário.
Sem particionamento, os cookies de terceiros podem permitir que os serviços rastreiem usuários e juntem suas informações de muitos sites de nível superior não relacionados. Isso é conhecido como rastreamento entre sites.
Os navegadores estão prestes a eliminar cookies de terceiros não particionados. Por isso, os CHIPS, a API Storage Access e os conjuntos de sites relacionados serão a única maneira de ler e gravar cookies de contextos entre sites, como iframes, quando os cookies de terceiros forem bloqueados.
![Diagrama mostrando como o cozimento pode ser compartilhado entre dois sites diferentes.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/without-cookie-partitioni-bb0cbbf0c63d.png?authuser=2&hl=pt)
Os CHIPS introduzem um novo atributo de cookie, Partitioned
, para oferecer suporte a cookies entre sites que são particionados por contexto de nível superior.
Cabeçalho Set-Cookie:
Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;
JavaScript:
document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"
Um cookie de terceiros particionado é vinculado ao site de nível superior onde está inicialmente definido e não pode ser acessado de outro lugar. Dessa forma, os cookies definidos por um serviço de terceiros só podem ser lidos no mesmo contexto incorporado do site de nível superior em que foram definidos inicialmente.
![Diagrama mostrando que dois sites diferentes que incorporam um terceiro em comum não vão mais compartilhar cookies com ele.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/with-cookie-partitioning-d3df97804f836.png?authuser=2&hl=pt)
Com os cookies particionados, quando um usuário visita o site A, e o conteúdo incorporado do site C define um cookie com o atributo particionado, o cookie é salvo em um jar particionado designado apenas para os cookies que o site C define quando é incorporado ao site A. O navegador só enviará esse cookie quando o site de nível superior for A.
Quando o usuário visita um novo site, por exemplo, o site B, um frame C incorporado não recebe o cookie que foi definido quando C foi incorporado no site A.
Se um usuário visitar o site C como um site de nível superior, o cookie particionado que C definiu quando foi incorporado em A também não será enviado nessa solicitação.
![Diagrama mostrando que os cookies não são compartilhados quando o mesmo terceiro é incorporado em dois sites diferentes.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/with-cookie-partitioning-a19ff8bdd6d0d.png?authuser=2&hl=pt)
Casos de uso
Por exemplo, o site retail.example
pode querer trabalhar com um serviço de terceiros support.chat.example
para incorporar uma caixa de chat de suporte. Atualmente, muitos serviços de chat incorporáveis dependem de cookies para salvar o estado.
![Diagrama mostrando um site com um widget de chat embutido](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/top-level-site-retailexa-b1bf622bc028e.png?authuser=2&hl=pt)
support.chat.example
.Sem a capacidade de definir um cookie entre sites, o support.chat.example
precisaria encontrar métodos alternativos, geralmente mais complexos, para armazenar o estado. Como alternativa, ele precisaria ser incorporado à página de nível superior, o que apresenta riscos, porque permite que o script support.chat.example
tenha privilégios elevados em retail.example, como a capacidade de acessar cookies de autenticação.
Os CHIPS oferecem uma opção mais fácil para continuar usando cookies entre sites, sem os riscos associados aos cookies não particionados.
Exemplos de casos de uso dos CHIPS incluem quaisquer cenários em que sub-recursos entre sites exigem alguma noção de sessão ou estado persistente com escopo para a atividade de um usuário em um único site de nível superior, como:
- Incorporações de chats de terceiros
- Incorporações de mapas de terceiros
- Incorporações de pagamentos de terceiros
- Balanceamento de carga de CDN de sub-recursos
- Provedores de CMS headless
- domínios sandbox para exibir conteúdo de usuário não confiável (como googleusercontent.com e githubusercontent.com);
- CDNs de terceiros que usam cookies para veicular conteúdo com acesso controlado pelo status de autenticação no site próprio (por exemplo, fotos de perfil em sites de mídias sociais hospedados em CDNs de terceiros)
- Frameworks de front-end que dependem de APIs remotas usando cookies nas solicitações
- Anúncios incorporados que precisam ter um escopo de estado por editor (por exemplo, capturar as preferências de anúncio dos usuários para esse site)
Por que o CHIPS usa um modelo de particionamento opcional
À medida que os navegadores estão removendo os cookies de terceiros não particionados, algumas outras abordagens de particionamento foram testadas.
O Firefox anunciou que está particionando todos os cookies de terceiros por padrão nos modos ETP Strict e navegação privada. Portanto, todos os cookies entre sites serão particionados pelo site de nível superior. No entanto, o particionamento de cookies sem a permissão de terceiros pode causar bugs inesperados, já que alguns serviços de terceiros criaram servidores que esperam um cookie de terceiros não particionado.
O Safari já tentou particionar cookies com base na heurística, mas acabou optando por bloqueá-los completamente, citando a confusão do desenvolvedor como um dos motivos. Recentemente, o Safari demonstrou interesse em um modelo opcional.
O que diferencia os CHIPS das implementações existentes de cookies particionados é a permissão de terceiros. Os cookies precisam ser definidos com um novo atributo para serem enviados em solicitações entre terceiros quando os cookies de terceiros (não particionados) forem descontinuados.
Embora cookies de terceiros ainda existam, o atributo Partitioned
permite a ativação de um tipo de comportamento de cookie mais restritivo e seguro. Os CHIPS são uma etapa importante para facilitar a transição dos serviços para um futuro sem cookies de terceiros.
Projeto técnico do particionamento de cookies
Atualmente, os cookies usam o nome do host ou o domínio do site que os define, ou seja, a chave do host.
Por exemplo, para cookies de https://support.chat.example
, a chave de host é ("support.chat.example")
.
De acordo com os CHIPS, os cookies que ativarem o particionamento terão chave dupla nas chaves de host e de partição.
A chave de partição de um cookie é o site (esquema e domínio registrável) do URL de nível superior que o navegador estava visitando no início da solicitação para o endpoint que definiu o cookie.
No exemplo anterior, em que https://support.chat.example
está incorporado em https://retail.example
, o URL de nível superior é https://retail.example
.
Nesse caso, a chave de partição é ("https", "retail.example")
.
Da mesma forma, a chave de partição de uma solicitação é o site do URL de nível superior que o navegador está visitando no início de uma solicitação. Os navegadores só podem enviar um cookie com o atributo Partitioned
em solicitações que tenham a mesma chave de partição desse cookie.
Veja como é a chave de cookie no exemplo anterior, antes e depois dos CHIPS.
![O site A e o site incorporado C compartilham um cookie particionado. Quando não estiver incorporado, o site C não poderá acessar o cookie particionado.](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/site-and-embedded-site-b6ea4419a367f.png?authuser=2&hl=pt)
Antes dos CHIPS
key=("support.chat.example")
Depois dos CHIPS
key={("support.chat.example"),("https", "retail.example")}
Design de segurança
Para incentivar boas práticas de segurança, com os CHIPS, os cookies são definidos e enviados apenas por protocolos seguros.
- Os cookies particionados precisam ser definidos com
Secure
. - É recomendável usar o prefixo
__Host-
ao definir cookies particionados para que eles sejam vinculados ao nome do host (e não ao domínio registrável).
Exemplo:
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;
Alternativas aos CHIPS
A API Storage Access e os Conjuntos de sites relacionados (RWS, na sigla em inglês) associados são mecanismos de plataforma da Web que permitem o acesso limitado a cookies entre sites para fins específicos e voltados ao usuário.
Essas são alternativas ao particionamento CHIPS, em que é necessário o acesso a cookes não particionados entre sites.
Considere a API Storage Access e os conjuntos de sites relacionados quando precisar que o mesmo cookie esteja disponível para um serviço incorporado em vários sites relacionados.
Os CHIPS permitem que um serviço atue como um componente isolado em vários sites, onde o mesmo cookie não precisa estar disponível em diversos sites. Se o serviço definir um cookie particionado, a chave de partição será o site de nível superior, e esse cookie não vai estar disponível para outros sites que também usam o serviço.
O design dos conjuntos de sites relacionados depende da API Storage Access e não se integra ao particionamento CHIPS. Se você tiver um caso de uso que depende de uma partição de cookies compartilhada entre sites em uma RWS, forneça exemplos e feedback sobre o problema do GitHub (link em inglês).
Demonstração
Nesta demonstração, você verá como os cookies particionados funcionam e como inspecioná-los no DevTools.
O site A incorpora um iframe do site B que usa JavaScript para definir dois cookies: um particionado e um não particionado. O site B mostra todos os cookies que podem ser acessados desse local usando document.cookie
.
Quando os cookies de terceiros forem bloqueados, o site B só vai poder definir e acessar o cookie com o atributo Partitioned
em um contexto entre sites.
Quando os cookies de terceiros são permitidos, o site B também pode definir e acessar o cookie não particionado.
![Site A e site B](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/3p-cookies-blocked-and-not-blocked.png?authuser=2&hl=pt)
Pré-requisitos
- Chrome 118 ou mais recente.
- Acesse
chrome://flags/#test-third-party-cookie-phaseout
e ative essa configuração
Usar o DevTools para inspecionar cookies particionados
- Acesse https://chips-site-a.glitch.me.
- Pressione
Control+Shift+J
(ouCommand+Option+J
no Mac) para abrir o DevTools. - Clique na guia Aplicativo.
- Navegue até Aplicativo > Armazenamento > Cookies.
- Clique em
https://chips-site-b.glitch.me
.
O DevTools vai mostrar todos os cookies da origem selecionada.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/QcTVEgWjGYQZJtMX0g4a.png?authuser=2&hl=pt)
O site B só pode definir o cookie particionado em um contexto entre sites. O cookie não particionado será bloqueado:
- Vai aparecer
__Host-partitioned-cookie
com a chave de partição do site de nível superiorhttps://chips-site-a.glitch.me
.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/DvSAMie7T41SFBY7wUrc.png?authuser=2&hl=pt)
- Clique em Acessar o site B.
- No DevTools, acesse Aplicativo > Armazenamento > Cookies.
- Clique em
https://chips-site-b.glitch.me
.
![Local B](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/site-b.png?authuser=2&hl=pt)
Nesse cenário, como você está no site B em um contexto de nível superior, ele pode definir e acessar os dois cookies:
unpartitioned-cookie
tem uma chave de partição vazia.- O cookie
__Host-partitioned-cookie
tem a chave de partiçãohttps://chips-site-b.glitch.me
.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/vl4ouXXVqQ1bB5dEP4iK.png?authuser=2&hl=pt)
Se você navegar de volta para o site A, unpartitioned-cookie
será armazenado no navegador, mas não poderá ser acessado pelo site A.
- Clique em Acessar o Site A.
- Clique na guia Rede.
- Clique em
https://chips-site-b.glitch.me
. - Clique na guia Cookies.
No site A, você vai encontrar __Host-partitioned-cookie
com a chave de partição do site de nível superior https://chips-site-a.glitch.me
.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/223LlvPnqtMPoEjMASht.png?authuser=2&hl=pt)
Se você marcar Mostrar solicitações de cookies filtradas, o DevTools vai mostrar que o cookie não particionado está bloqueado, destacado em amarelo com uma dica: "Este cookie foi bloqueado devido às preferências do usuário".
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/a4jDguCgbwt9D5RB5Q6r.png?authuser=2&hl=pt)
Em Aplicativo > Armazenamento > Cookies clicando em https://chips-site-b.glitch.me
vai mostrar:
unpartitioned-cookie
com a chave de partição vazia.- Cookie
__Host-partitioned-cookie
com a chave de partiçãohttps://chips-site-a.glitch.me
.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/privacy-sandbox/assets/images/tv3pAAoTktiX3nZdIUIh.png?authuser=2&hl=pt)
__Host-partitioned-cookie
tem a chave de partição https://chips-site-a.glitch.me
. unpartitioned-cookie
é exibido, mas não pode ser acessado pelo iframe do site B quando está incorporado ao site A.Limpar cookies
Para redefinir a demonstração, limpe todos os cookies do site:
- Pressione
Control+Shift+J
(ouCommand+Option+J
no Mac) para abrir o DevTools. - Clique na guia Aplicativo.
- Navegue até Aplicativo > Armazenamento > Cookies.
- Clique com o botão direito do mouse em
https://chips-site-b.glitch.me
. - Clique em Limpar.
Recursos
- GitHub: leia a explicação, faça perguntas e acompanhe a discussão.
- Suporte ao desenvolvedor: faça perguntas e participe de discussões no repositório de suporte ao desenvolvedor do Sandbox de privacidade.