Los recursos de origen cruzado atendidos por terceros a menudo no incluyen encabezados CORP adecuados. Si se pueden solicitar sin credenciales, ahora puedes habilitar el aislamiento de origen cruzado marcándolos como tales.
Enviamos el valor de la nueva Política de incorporaciones de origen cruzado (COEP)
credentialless
, que permite que el navegador cargue recursos de origen cruzado que
usar la política de recursos entre dominios (CORP) enviando una solicitud sin
credenciales, como cookies. Esto ayuda a los desarrolladores a adoptar orígenes cruzados
el aislamiento de manera más fácil.
Por qué necesitamos el aislamiento de origen cruzado
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 llamado
aislamiento de origen cruzado. Con origen cruzado
estado aislado, la página web puede utilizar funciones con privilegios, como
SharedArrayBuffer
:
performance.measureUserAgentSpecificMemory()
y temporizadores de alta precisión con mejor resolución
y aísla el origen de los demás, a menos que estén habilitados.
La página web debe enviar dos encabezados HTTP para habilitar el aislamiento de origen cruzado:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
Con un estado aislado de origen cruzado, se deben entregar todos los recursos de origen cruzado
con CORS o configura un encabezado Cross-Origin-Resource-Policy
para que se cargue.
Desafíos para habilitar el aislamiento de origen cruzado
Si bien el aislamiento de origen cruzado brinda a las páginas web una mejor seguridad y la capacidad de habilitar funciones potentes, implementarlas puede difícil. Una de las mayores desafíos es el requisito para habilitar el CORS o el CORP para todos los de Google Cloud. El navegador no cargará los recursos sin esos encabezados en una página aislada de origen cruzado.
Estos recursos de origen cruzado, por lo general, son entregados por terceros para los que pueden no será fácil agregar los encabezados necesarios.
Pero ¿qué sucede si sabemos que el recurso es lo suficientemente seguro para cargarlo? De hecho, la única recursos que están en riesgo son los solicitados con credenciales, porque incluir información confidencial que el atacante no puede cargar en su por sí solas. Esto significa que los recursos que se pueden solicitar sin credenciales están estén disponibles y sean seguros para cargar.
credentialless
al rescate
Aquí es donde COEP: credentialless
entra en juego. credentialless
es un valor nuevo
para el encabezado Cross-Origin-Embedder-Policy
. Al igual que con require-corp
, puede
habilitar el aislamiento de origen cruzado, pero en lugar de requerir un CORP:cross-origin
para las solicitudes de origen cruzado sin cors, en su lugar, se envían sin
credenciales (por ejemplo, cookies).
Podrás habilitar el aislamiento de origen cruzado de manera alternativa con el siguientes dos encabezados:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
Esto significa que el servidor de origen cruzado solicitado no podrá responder con un recurso sensible y el solicitante siempre puede suponer que la respuesta solo contiene información disponible de forma pública.
Esto también se alinea con la configuración plan de eliminación gradual de las cookies de terceros.
Demostración
Puedes probar varias opciones de encabezado en esta demostración: https://cross-origin-isolation.glitch.me
Preguntas frecuentes
¿Puedo enviar una solicitud con credenciales en un entorno de credentialless
?
Sin duda, a costa de cambiar el modo de la solicitud para requerir una verificación de CORS
en la respuesta. Para las etiquetas HTML, como <audio>
, <img>
, <link>
, <script>
,
y <video>
, solo debes agregar crossorigin="use-credentials"
de forma explícita para informar
para enviar solicitudes con credenciales.
Por ejemplo, aunque un documento en https://www.example.com
tenga
Encabezado Cross-Origin-Embedder-Policy: credentialless
, <img
src="https://images.example.com/avatar.png" crossorigin="use-credentials">
hará lo siguiente
envía una solicitud con credenciales.
Para la API de fetch()
, se puede usar request.mode = 'cors'
.
Se proporcionó COEP: credentialless
, ¿por qué COEP: require-corp
sigue siendo útil para mi sitio web?
COEP: require-corp
no requiere que cambies manualmente el modo de solicitud a
CORS si se necesitan cookies para algunos subrecursos de origen cruzado.
¿Puedo también cargar iframes de origen cruzado sin encabezados especiales en un entorno credentialless
?
No. La carga de iframes de origen cruzado en un entorno credentialless
aún requiere las mismas condiciones que require-corp
. Los documentos iframe deben publicarse con dos encabezados:
Cross-Origin-Embedder-Policy: credentialless
(orequire-corp
)Cross-Origin-Resource-Policy: cross-origin
La buena noticia es que hay un debate en curso sobre cómo permitir la carga de iframes de origen cruzado sin esos encabezados mediante la asignación de iframes crossorigin="anonymous"
.
Esto permitirá que los iframes de origen cruzado se carguen sin encabezados, pero sin
credenciales.
¿Otros navegadores adoptarán esta función?
- Problema de seguimiento de Firefox
- Solicitud de Webkit para la posición: Sin señal
- W3C TAG Solicitud de puesto: Pendiente
¿Qué sigue?
Hay dos actualizaciones adicionales que se avecinan para mitigar otros desafíos relacionados con Aislamiento de origen cruzado:
Los usuarios que se registraron en la prueba de origen de Chrome para extender el cambio de SharedArrayBuffer debido a los obstáculos anteriores podrían preguntarse cuándo se cerrará. Originalmente, anunciamos que se resolvería en Chrome 96, pero decidimos posponerlo hasta Chrome 106.
Recursos
- Cómo hacer que tu sitio web esté "aislado de origen cruzado" usando COOP y COEP
- Por qué necesitas un sistema “aislado de origen cruzado” para acceder a funciones potentes.
- Guía para habilitar el aislamiento de origen cruzado
- Actualizaciones de SharedArrayBuffer en Chrome 88 en Android y Chrome 92 en computadoras de escritorio
Foto de Martin Adams activado Eliminar salpicaduras