Iframe sin credenciales: Incorpora fácilmente iframes en entornos COEP

Arthur Sonzogni
Arthur Sonzogni

Ahora los desarrolladores que usan COEP pueden incorporar iframes de terceros que no usen COEP.

Iframe sin credenciales está habilitado de forma predeterminada a partir de la versión 110 de Chrome. Esta solución soluciona los reclamos más comunes que los desarrolladores que trabajan con la Política de incorporaciones de origen cruzado (COEP) tienen: incorporar iframes de terceros que no establecen un COEP.

Por qué necesitamos el COEP

Algunas APIs web aumentan el riesgo de ataques de canal lateral, como Spectre. Para mitigar ese riesgo, los navegadores ofrecen un entorno aislado basado en la aceptación que se denomina aislamiento de origen cruzado, el cual requiere implementar COEP. El aislamiento de origen cruzado permite que los sitios web usen funciones con privilegios, como SharedArrayBuffer, performance.measureUserAgentSpecificMemory() y temporizadores de alta precisión con mejor resolución.

Para habilitar el aislamiento de origen cruzado, los sitios web deben enviar los siguientes encabezados HTTP:

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

También se puede usar COEP:sin credenciales como alternativa a require-corp. Consulta la documentación para obtener más detalles.

Desafíos para habilitar el COEP

Si bien el aislamiento de origen cruzado ofrece a las páginas web una mayor seguridad y la capacidad de habilitar funciones potentes, la implementación de COEP puede ser difícil. Uno de los mayores desafíos es que todos los iframes de origen cruzado deben implementar COEP y CORP. El navegador no cargará iframes sin esos encabezados.

Iframe sin credenciales al rescate

Presentamos <iframe credentialless> para ayudar a incorporar iframes de terceros que no configuran COEP. Cuando agregas el atributo credentialless al elemento <iframe>, el iframe se carga desde un contexto vacío diferente. En particular, se cargan sin cookies. Esto permite quitar la restricción de COEP.

Ejemplo:

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

Este iframe se crea en un nuevo contexto efímero y no tiene acceso a ninguna de las cookies asociadas con el sitio web de nivel superior. En su lugar, comienza con un frasco de galletas vacío. Del mismo modo, las APIs de almacenamiento, como LocalStorage, CacheStorage, IndexedDB, etc., cargan y almacenan datos en la nueva partición efímera. El alcance de la partición se limita al documento de nivel superior actual y al origen del iframe. Todo este almacenamiento se libera una vez que se descarga el documento de nivel superior.

Los iframes sin credenciales no están sujetos a las reglas de incorporación de COEP. Siguen siendo seguras: dado que siempre se cargan desde un nuevo contexto vacío cada vez, no deben contener datos personalizados, que es lo que buscan los atacantes. Si un iframe solo contiene datos públicos, no es valioso para el atacante.

Demostración

Puedes ver una demostración de un iframe sin credenciales.

Preguntas frecuentes

¿Otros navegadores adoptarán esta función?

¿Hay una <iframe> anidada dentro de una <iframe credentialless> sin credencial?

Sí. Se hereda. Una vez que un iframe no tiene credenciales, se aplica a todos los iframes del subárbol completo, incluso sin un atributo credentialless.

¿Las ventanas emergentes también se crean desde <iframe credentialless> sin credenciales?

Las ventanas emergentes se abren como si se hubiera establecido noopener. Se crean en un nuevo contexto regular de nivel superior y no carecen de credenciales. No pueden comunicarse con el iframe sin credenciales.

¿Cómo puedo detectar que el documento se incorporó en un iframe sin credenciales?

window.credentialless es verdadero dentro de un iframe sin credenciales y falso de lo contrario. Su valor es undefined en un navegador web que no es compatible con <iframe credentialless>.

Recursos