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

Arthur Sonzogni
Arthur Sonzogni

Los desarrolladores que usan COEP ahora pueden incorporar iframes de terceros que no utilicen COEP ellos mismos.

Iframe sin credenciales está habilitado de forma predeterminada a partir de la versión 110 de Chrome. Soluciona los reclamos más comunes que tienen los desarrolladores que trabajan con Cross-Origin-Embedder-Policy (COEP): incorporar iframes de terceros que no establecen COEP.

Por qué necesitamos el programa 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 habilitación que se denomina aislamiento de origen cruzado, el cual requiere la implementación de 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

COEP:credentialless también se puede usar 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 mejora la seguridad de las páginas web y la capacidad de habilitar funciones potentes, la implementación de la 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á los iframes que no tengan esos encabezados.

Iframe sin credenciales al rescate

Presentamos <iframe credentialless> para ayudar a incorporar iframes de terceros que no establecen COEP. Cuando agregas el atributo credentialless al elemento <iframe>, el iframe se carga desde un contexto vacío diferente. En particular, se carga 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 cambio, 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 aplica tanto al documento de nivel superior actual como al origen del iframe. Se libera todo este almacenamiento una vez que se descarga el documento de nivel superior.

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

Demostración

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

Preguntas frecuentes

¿Otros navegadores adoptarán esta función?

¿Hay un <iframe> anidado dentro de un <iframe credentialless> sin credenciales?

Sí. Se hereda. Cuando un iframe no tiene credenciales, se aplica a todos los iframes de todo el subárbol, incluso sin un atributo credentialless.

¿Las ventanas emergentes creadas a partir de <iframe credentialless> también no tienen credenciales?

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

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

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

Recursos