Prueba de origen de iframe anónima: Incorpora fácilmente iframes en entornos COEP

Arthur Sonzogni
Arthur Sonzogni

Los desarrolladores que usan el COEP ahora pueden incorporar iframes de terceros que no usan el 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, entre otras cosas, requiere la implementación de la COEP. Esto permite que los sitios web usen funciones privilegiadas, 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 dos encabezados HTTP:

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

Desafíos para habilitar la COEP

Si bien el aislamiento de origen cruzado proporciona 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 también deben implementar COEP y CORP. El navegador no cargará los iframes sin esos encabezados.

Por lo general, un tercero publica los iframes, para quien puede no ser fácil implementar la COEP.

El iframe anónimo al rescate

Aquí es donde entra en juego el iframe anónimo. Cuando se agrega el atributo anonymous al elemento <iframe>, el iframe se carga desde una partición de almacenamiento efímera diferente y ya no está sujeto a las restricciones de la COEP.

Ejemplo:

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

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. Comienza desde un vaso 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 y al origen del iframe actuales. El almacenamiento se borrará una vez que se descargue el documento de nivel superior.

Los iframes anónimos no están sujetos a las reglas de incorporación de COEP. Esto sigue siendo seguro, ya que se cargan desde un contexto vacío nuevo cada vez. Se cargarán sin que se personalicen sus datos. Solo contienen datos públicos, que no son valiosos para el atacante.

Demostración

Puedes consultar un iframe anónimo en https://anonymous-iframe.glitch.me/.

Regístrate para obtener una prueba de origen

Para garantizar que los iframes anónimos ayuden a los desarrolladores a adoptar el aislamiento de origen cruzado, los ponemos a disposición en Chrome desde la versión 106 a la 108 como una prueba de origen.

Regístrate en la prueba de origen para permitir que tu sitio web use iframes anónimos:

  1. Solicita un token para tu origen.
  2. Usa el token de una de las siguientes maneras:
    • En tu código HTML: html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • En tu código JavaScript: js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
    • En los encabezados HTTP: text Origin-Trial: TOKEN_GOES_HERE
  3. Agrega un iframe anónimo a tu página: html <iframe anonymous src="https://example.com">

Si tienes comentarios sobre esta función, informa un problema en el repositorio de GitHub.

Prueba de origen de terceros

La prueba de origen también está disponible para secuencias de comandos de terceros. Esto significa que se puede habilitar con secuencias de comandos incorporadas en la página.

Obtén más información para registrarte en una prueba de origen de terceros.

Preguntas frecuentes

¿Otros navegadores adoptarán esta función?

¿Los iframes anidados dentro de <iframe anonymous> son anónimos?

Sí. Se hereda. Una vez que un iframe es anónimo, esto se aplica a todos los iframes del subárbol completo, incluso sin un atributo anonymous.

¿Las ventanas emergentes creadas desde <iframe anonymous> también son anónimas?

Las ventanas emergentes se abren como si se hubiera configurado noopener. Se crean a partir de un nuevo contexto de nivel superior normal y no son anónimos. No pueden comunicarse con el iframe anónimo.

Recursos