Los desarrolladores que usan el COEP ahora pueden incorporar iframes de terceros que no usan el COEP.
El iframe sin credenciales está habilitado de forma predeterminada a partir de la versión 110 de Chrome. Soluciona el problema más común que tienen los desarrolladores que trabajan con la política de incorporación de origen cruzado (COEP): incorporar iframes de terceros que no establecen la COEP.
Por qué necesitamos la 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 voluntaria llamado aislamiento de origen cruzado, que requiere la implementación de la COEP. El aislamiento de distintos orígenes permite que los sitios web usen funciones privilegiadas, como SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
y cronómetros de alta precisión con mejor resolución.
Para habilitar el aislamiento entre orígenes, 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 la COEP
Si bien el aislamiento de origen cruzado brinda 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á los iframes sin esos encabezados.
Iframe sin credenciales al rescate
Presentamos <iframe credentialless>
para ayudar a incorporar iframes de terceros que no establezcan el COEP. Cuando se agrega el atributo credentialless
al elemento <iframe>
, el iframe se carga desde un contexto diferente y vacío. 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étera, 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 borra 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. Aún así, son seguros, ya que se cargan desde un contexto nuevo y vacío cada vez, por lo que no deberían contener datos personalizados, que es lo que buscan los atacantes. Si un iframe solo contiene datos públicos, no es valioso para un atacante.
Demostración
Puedes consultar una demo de un iframe sin credenciales.
Preguntas frecuentes
¿Otros navegadores adoptarán esta función?
- Solicitud de posición de Mozilla: Pendiente
- Solicitud de posición de Webkit: Sin señal
- W3C TAG Solicitud de posición: satisfecha
¿Un <iframe>
está anidado dentro de un <iframe credentialless>
sin credenciales?
Sí. Se hereda. Una vez que un iframe no tiene credenciales, esto se aplica a todos los iframes del subárbol completo, incluso sin un atributo credentialless
.
¿Las ventanas emergentes creadas desde <iframe credentialless>
también carecen de credenciales?
Las ventanas emergentes se abren como si se hubiera configurado noopener
. Se crean en un nuevo contexto de nivel superior normal y no tienen credenciales. No pueden comunicarse con el iframe sin credenciales.
¿Cómo detectar si 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 admite <iframe credentialless>
.
Recursos
- Cómo hacer que tu sitio web sea "aislado de varios orígenes" con COOP y COEP
- Por qué necesitas "aislamiento de origen cruzado" para funciones potentes
- Una guía para habilitar el aislamiento de origen cruzado
- Actualizaciones de SharedArrayBuffer en Chrome 88 para Android y Chrome 92 para computadoras
- Carga recursos de origen cruzado sin encabezados CORP con
COEP: credentialless
- IFrame sin credenciales: seguridad web | MDN