Iframe sem credencial: incorpore facilmente iframes em ambientes COEP

Arthur Sonzogni
Arthur Sonzogni

Os desenvolvedores que usam o COEP agora podem incorporar iframes de terceiros que não usam o COEP.

O iframe sem credenciais é ativado por padrão na versão 110 do Chrome. Ela resolve as reclamações mais comuns que os desenvolvedores que trabalham com Cross-Origin-Embedder-Policy (COEP) têm: incorporação de iframes de terceiros que não definem COEP.

Por que precisamos da COEP

Algumas APIs da Web aumentam o risco de ataques de canal lateral, como o Spectre. Para reduzir esse risco, os navegadores oferecem um ambiente isolado com base na permissão chamado isolamento de origem cruzada, que exige a implantação do COEP. O isolamento de origem cruzada permite que os sites usem recursos privilegiados, como SharedArrayBuffer, performance.measureUserAgentSpecificMemory() e temporizadores de alta precisão com melhor resolução.

Para ativar o isolamento de origem cruzada, os sites precisam enviar os seguintes cabeçalhos HTTP:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

COEP:credentialless também pode ser usado como alternativa ao require-corp. Consulte a documentação para mais detalhes.

Desafios ao ativar a COEP

Embora o isolamento de origem cruzada aumente a segurança das páginas da Web e a capacidade de ativar recursos avançados, a implantação da COEP pode ser difícil. Um dos maiores desafios é que todos os iframes de origem cruzada precisam implantar COEP e CORP. Iframes sem esses cabeçalhos não serão carregados pelo navegador.

Iframe sem credencial para o resgate

Estamos lançando o <iframe credentialless> para ajudar a incorporar iframes de terceiros que não definem o COEP. Ao adicionar o atributo credentialless ao elemento <iframe>, o iframe é carregado usando um contexto vazio diferente. Mais especificamente, ele é carregado sem cookies. Isso permite remover a restrição de COEP.

Exemplo:

<iframe credentialless src="https://example.com">

Este iframe é criado em um novo contexto temporário e não tem acesso a nenhum dos cookies associados ao site de nível superior. Em vez disso, começa com um pote de biscoito vazio. Da mesma forma, APIs de armazenamento como LocalStorage, CacheStorage, IndexedDB e assim por diante carregam e armazenam dados na nova partição temporária. O escopo da partição é o documento de nível superior atual e a origem do iframe. Todo esse armazenamento é liberado quando o documento de nível superior é descarregado.

Os iframes sem credenciais não estão sujeitos às regras de incorporação COEP. Elas ainda são seguras: como são carregadas a partir de um novo contexto vazio todas as vezes, elas não devem conter dados personalizados, que é o que os atacantes querem. Se um iframe contém apenas dados públicos, ele não tem valor para um invasor.

Demonstração

Confira uma demonstração de um iframe sem credenciais.

Perguntas frequentes

Esse recurso será usado por outros navegadores?

Um <iframe> está aninhado dentro de um <iframe credentialless> sem credenciais?

Sim. Ela é herdada. Quando um iframe não tem credenciais, isso se aplica a todos os iframes em toda a subárvore, mesmo sem um atributo credentialless.

Os pop-ups criados no <iframe credentialless> também são sem credenciais?

Os pop-ups são abertos como se a noopener estivesse definida. Eles são criados em um novo contexto normal de nível superior e não são sem credenciais. Eles não conseguem se comunicar com o iframe sem credenciais.

Como detectar que o documento foi incorporado em um iframe sem credenciais?

window.credentialless é verdadeiro dentro de um iframe sem credenciais e falso, caso contrário. Seu valor é undefined em um navegador da Web que não é compatível com <iframe credentialless>.

Recursos