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 credencial é ativado por padrão na versão 110 do Chrome. Ela resolve as reclamações mais comuns que os desenvolvedores que trabalham com o Cross-Origin-Embedder-Policy (COEP) têm: a incorporação de iframes de terceiros que não definem o COEP.

Por que precisamos do 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 permissão de ativaçã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 timers 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

A alternativa COEP:credentialless (em inglês) também pode ser usada como alternativa à require-corp. Consulte a documentação para saber mais detalhes.

Desafios da ativação do COEP

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

Iframe sem credenciais ao resgate

Lançamos 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 de um contexto diferente e vazio. Em particular, ele é carregado sem cookies. Isso permite remover a restrição do COEP.

Exemplo:

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

Esse 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, ele começa com um pote de biscoitos 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 é tanto o documento de nível superior atual quanto a origem do iframe. Todo esse armazenamento será apagado assim que o documento de nível superior for descarregado.

Os iframes sem credenciais não estão sujeitos às regras de incorporação do COEP. Eles ainda são seguros: como são sempre carregados de um novo contexto vazio, eles não devem conter dados personalizados, que é o que os atacantes procuram. Se um iframe contiver apenas dados públicos, ele não será valioso para um invasor.

Demonstração

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

Perguntas frequentes

Esse recurso será adotado por outros navegadores?

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

Sim. Ele é herdado. Quando um iframe não tem credencial, ele é aplicado a todos os iframes em toda a subárvore, mesmo sem um atributo credentialless.

Os pop-ups criados no <iframe credentialless> também não têm credenciais?

Os pop-ups são abertos como se a noopener estivesse definida. Eles são criados em um novo contexto regular de nível superior e não são sem credenciais. Ele não consegue 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. O valor dela é undefined em um navegador da Web incompatível com <iframe credentialless>.

Recursos