Iframe sem credencial: incorpore facilmente iframes em ambientes COEP

Arthur Sonzogni
Arthur Sonzogni

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

O iframe sem credenciais é ativado por padrão na versão 110 do Chrome. Ele resolve a reclamação mais comum dos desenvolvedores que trabalham com a política de incorporação de origem cruzada (COEP, na sigla em inglês): a incorporação de iframes de terceiros que não definem a 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 opção de ativação chamado isolamento de origem cruzada, que exige a implantação do COEP. O isolamento entre origens permite que os sites usem recursos privilegiados, incluindo SharedArrayBuffer, performance.measureUserAgentSpecificMemory() e timers de alta precisão com melhor resolução.

Para ativar o isolamento entre origens, os sites precisam enviar os seguintes cabeçalhos HTTP:

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

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

Desafios para ativar a COEP

Embora o isolamento entre origens ofereça mais segurança às páginas da Web e a capacidade de ativar recursos poderosos, a implantação do COEP pode ser difícil. Um dos maiores desafios é que todos os iframes entre origens precisam implantar COEP e CORP. Os iframes sem esses cabeçalhos não serão carregados pelo navegador.

Iframe sem credenciais ao 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 de um contexto diferente e vazio. Em particular, ele é carregado sem cookies. Isso permite remover a restrição de 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, 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. A partição é delimitada pelo documento de nível superior atual e pela origem do iframe. Todo esse armazenamento é limpo quando o documento de nível superior é 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 carregados de um novo contexto vazio toda vez, eles não podem conter dados personalizados, que é o que os invasores procuram. Se um iframe tiver 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 credenciais, isso se aplica a todos os iframes no subárvore, mesmo sem um atributo credentialless.

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

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

Como detectar se 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 é undefined em um navegador da Web que não oferece suporte a <iframe credentialless>.

Recursos