Alinea los temporizadores con restricciones de aislamiento entre dominios

Antes de la versión 91, las resoluciones de cronómetro en Chrome estaban restringidas a 5 microsegundos en computadoras de escritorio, donde el aislamiento de sitios estaba habilitado, y a 100 microsegundos en Android, cuando no lo está.

A partir de la versión 91, después de un cambio de especificación, Chrome restringirá la resolución de temporizadores explícitos (performance.now(), performance.timeOrigin y otras APIs de rendimiento que exponen DOMHighResTimestamps) a 100 microsegundos en todas las plataformas. Cuando se habilita el aislamiento de origen cruzado, los sitios web pueden disminuir la restricción a 5 microsegundos, independientemente de la plataforma.

Obtener capacidades más potentes mediante la habilitación del aislamiento de origen cruzado es un enfoque similar que se adopta en SharedArrayBuffer. El aislamiento de origen cruzado es un estado en el que una página web está aislada de otros orígenes, excepto de aquellos que aceptaron hacerlo.

¿Tengo que hacer algo al respecto?

Probablemente no. performance.now() se limitó a resoluciones mucho más aproximadas en otros navegadores (por ejemplo, 1 milisegundo = 0.001 segundos), por lo que, de todos modos, no deberías haberte confiado en la resolución actual.

Al mismo tiempo, si quieres aprovechar una mayor resolución para tus cronómetros (por ejemplo, para obtener mediciones de rendimiento más precisas), debes asegurarte de que tu sitio esté aislado en orígenes cruzados. De esta manera, obtendrás una mejor resolución en Chrome y otros navegadores basados en Chromium, así como en Firefox.

¿Qué tienen que ver los temporizadores con el aislamiento de origen cruzado?

Los proveedores de navegadores decidieron limitar los cronómetros a resoluciones más generales (así como la disponibilidad de SharedArrayBuffers que se pueden usar como cronómetros implícitos) cuando se descubrió Spectre. Esto se debe a que Spectre, y otros ataques de ejecución especulativa similares, dependen de temporizadores para medir el tiempo que tardan ciertas operaciones y, luego, adivinar el contenido de la memoria del proceso.

Si bien los ataques de ejecución especulativa se pueden ejecutar con temporizadores generales, los temporizadores de alta resolución pueden acelerarlos. Chrome usó su arquitectura de aislamiento de sitios, junto con otros mecanismos, para mitigar el riesgo y volver a habilitar esas funciones, pero solo se limita a las plataformas de computadoras y los navegadores Chromium. Tener APIs que dependan de la arquitectura del navegador subyacente no es realmente lo ideal.

El aislamiento de origen cruzado proporciona el modelo de referencia estándar para que los navegadores ejecuten páginas en un entorno aislado, de modo que no puedan cargar recursos de origen cruzado que no estén dispuestos y, por lo tanto, no estén en riesgo para Spectre. Con el aislamiento de origen cruzado, ahora podemos permitir que las páginas accedan a cronómetros de alta resolución, SharedArrayBuffer y a otras APIs que no pueden exponerse en procesos que pueden leer datos arbitrarios de origen cruzado.

Si quieres obtener más información sobre el segundo plano detrás de este cambio, consulta Por qué necesitas el uso del “aislamiento de origen cruzado” para las funciones potentes.

Foto de portada de Linda Perez Johannessen en Unsplash.