Para impedir alguns tipos de rastreamento entre sites de canal lateral, o Chrome particionou a maioria das APIs de armazenamento e comunicação em contextos de terceiros.
Status da implementação
O recurso foi ativado para todos os usuários no Chrome 115 e versões mais recentes. A proposta de particionamento de armazenamento está aberta para mais discussões.
O que é a partição de armazenamento?
Para impedir alguns tipos de rastreamento entre sites de canal lateral, o Chrome está particionando as APIs de armazenamento e comunicação em contextos de terceiros.
Sem particionamento de armazenamento, um site pode mesclar dados de diferentes sites para rastrear o usuário na Web. Além disso, ele permite que o site incorporado infira estados específicos sobre o usuário no site de nível superior usando técnicas de canal lateral, como ataques de tempo, XS-Leaks e COSI.
Historicamente, o armazenamento era chaveado apenas pela origem. Isso significa que, se um
iframe de example.com
for incorporado a a.com
e b.com
, ele poderá aprender
sobre seus hábitos de navegação nesses dois sites armazenando e
recuperando um ID do armazenamento. Com o particionamento de armazenamento de terceiros ativado,
o armazenamento de example.com
existe em duas partições diferentes, uma para a.com
e outra para b.com
.
A partição geralmente significa que os dados armazenados por APIs de armazenamento, como o armazenamento local e o IndexedDB por um iframe, não são mais acessíveis para todos os contextos na mesma origem. Em vez disso, os dados estão disponíveis apenas para contextos com a mesma origem e o mesmo site de nível superior.
Particionamento de armazenamento em iframes encadeados
Quando um iframe contém um iframe, as coisas começam a ficar mais complicadas. Isso é especialmente verdadeiro quando a mesma origem está em mais de um lugar na cadeia.
Por exemplo, A1 contém um iframe para B, que contém um iframe para A2, e A1 e A2 estão no mesmo site. Se considerarmos apenas os contextos de nível superior e atual ao particionar, o iframe A2 poderá ser considerado de primeiro nível, já que está no mesmo site que o de nível superior (A1), apesar do iframe de terceiros (B) intermediário. Isso poderia expor o A2 a riscos de segurança, como clickjacking, se o A2 tivesse acesso ao armazenamento não particionado por padrão.
Para resolver esse problema, o Chrome inclui um "bit ancestral" extra como parte da chave de partição de armazenamento, que é definida se algum documento entre o contexto atual e o de nível superior for entre sites. Nesse caso, o site B é entre sites, então o bit seria definido para A2 e o armazenamento seria particionado de A1.
Quando não há um contexto entre sites na cadeia, o armazenamento não é particionado. Por exemplo, o site A1 que contém um iframe para A2, que contém um iframe para A3, não seria particionado para A1, A2 nem A3, já que todos estão no mesmo site.
Para sites que precisam de acesso não particionado em iframes encadeados, o Chrome está testando a extensão da API Storage Access para permitir esse caso de uso. Como a API Storage Access exige que o site enquadrado invoque explicitamente a API, isso reduz o risco de clickjacking.
APIs atualizadas
As APIs afetadas pelo particionamento podem ser divididas nos seguintes grupos:
APIs do Storage
- Sistema de cotas
- O sistema de cota é usado para determinar quanto espaço em disco é alocado para armazenamento. O sistema de cota gerencia cada partição como um bucket separado para determinar quanto espaço é permitido e quando ele é limpo.
- O
navigator.storage.estimate()
retorna as informações da partição. APIs exclusivas do Chrome, comowindow.webkitStorageInfo
enavigator.webkitTemporaryStorage
, serão descontinuadas. - IndexedDB e armazenamento em cache usam o novo sistema de cotas particionado.
- API Web Storage
- A API Web Storage oferece mecanismos pelos quais os navegadores podem armazenar pares de chave-valor. Há dois mecanismos: armazenamento local e armazenamento de sessão. No momento, eles não são gerenciados por cota, mas ainda são particionados.
- Sistema de arquivos particular do Origin
- A API File System Access permite que um site leia ou salve mudanças diretamente em arquivos e pastas no dispositivo depois que o usuário concede acesso. O Origin Private File System permite que uma origem armazene conteúdos particulares no disco, que podem ser acessados facilmente pelo usuário, e são particionados.
- API Storage Bucket
- A API Storage Bucket está sendo desenvolvida para o Storage Standard, que consolida várias APIs de armazenamento, como IndexedDB e localStorage, usando um novo conceito chamado buckets. Os dados armazenados nos buckets e os metadados associados a eles são particionados.
- Cabeçalho Clear-Site-Data
- Incluir o cabeçalho
Clear-Site-Data
na resposta permite que um servidor solicite a limpeza dos dados armazenados no navegador do usuário. O cache, os cookies e o armazenamento DOM podem ser limpos. O uso do cabeçalho apenas limpa o armazenamento em uma partição.
- Armazenamento de URLs de blobs
- Um blob é um objeto que contém dados brutos a serem processados, e um URL de blob pode ser gerado para acessar o recurso. As lojas de URL de blobs não são particionadas. Para oferecer suporte a um caso de uso de navegação em um contexto de nível superior para qualquer URL de blob (discussão), a loja de URL de blob pode ser particionada pelo cluster de agentes em vez do site de nível superior. Esse recurso ainda não está disponível para testes, e o mecanismo de particionamento pode mudar no futuro.
APIs de comunicação
Além das APIs de armazenamento, as APIs de comunicação que permitem que um contexto se comunique entre os limites de origem também são particionados. As mudanças afetam principalmente APIs que permitem a descoberta de outros contextos por transmissão ou encontro de mesma origem.
Para as APIs de comunicação a seguir, os iframes de terceiros não podem mais se comunicar com o contexto de mesma origem:
- Canal de transmissão A
- API Broadcast Channel permite a comunicação entre contextos de navegação (janelas, guias ou iframes) e workers da mesma origem.
- O iframe cross-site
postMessage()
em que a relação entre os contextos é claramente definida não será alterado.
- SharedWorker
- A API SharedWorker fornece um worker que pode ser acessado em contextos de navegação da mesma origem.
- Bloqueios da Web
- A API Web Locks permite que o código executado em uma guia ou worker da mesma origem adquira uma trava para um recurso compartilhado enquanto algum trabalho é realizado.
API Service Worker
A API Service Worker oferece a interface para realizar tarefas em segundo plano. Os sites criam registros persistentes que criam um novo contexto de worker para responder a eventos, e esse worker pode se comunicar com qualquer contexto de mesma origem. Além disso, a API Service Worker pode mudar o tempo das solicitações de navegação, o que pode levar a possíveis vazamentos de informações entre sites, como sniffing de histórico.
Portanto, os Service Workers registrados em um contexto de terceiros são particionados.
APIs de extensão
As extensões são programas que permitem aos usuários personalizar a experiência de navegação.
As páginas de extensão (páginas com um esquema chrome-extension://
) podem ser incorporadas a
sites na Web. Nesses casos, elas continuam tendo acesso à
partição de nível superior.
Essas páginas também podem incorporar outros sites. Nesse caso, esses sites terão
acesso à partição de nível superior, desde que a extensão tenha
permissões de host
para esse site.
Para mais informações, consulte a documentação da extensão.
Demonstração: como testar a partição de armazenamento
Site de demonstração: https://storage-partitioning-demo-site-a.glitch.me/

A demonstração usa dois sites: site A e site B.
- Quando você visita o site A no contexto de nível superior, ele define dados usando vários métodos de armazenamento.
- O site B incorpora uma página do site A, e essa incorporação tenta ler as opções de armazenamento definidas anteriormente.
- Quando o site A é incorporado ao site B, ele não tem acesso a esses dados quando o armazenamento é particionado, e as leituras falham.
- A demonstração usa o sucesso ou a falha de cada leitura para mostrar se os dados são particionados.
Por enquanto, é possível desativar o particionamento de armazenamento no Chrome usando a chave de linha de comando --disable-features=ThirdPartyStoragePartitioning
.
Você também pode testar outros navegadores da mesma forma para conferir o status de particionamento deles.
Engajamento e compartilhamento de feedback
- GitHub: leia a proposta original, faça perguntas e participe da discussão.
- Suporte para desenvolvedores: faça perguntas e participe das discussões no Repositório de suporte para desenvolvedores do Sandbox de privacidade.
- Registrar bugs: registre um bug no rastreador do Chromium se você acredita que algo não está funcionando como esperado.