Prima della versione 91, le risoluzioni dei timer in Chrome erano limitate a 5 microsecondi sui computer, dove era attivato l'isolamento dei siti, e a 100 microsecondi su Android, dove non lo è.
A partire dalla versione 91, in seguito a una modifica di specifiche,
Chrome limiterà la risoluzione di timer espliciti
(performance.now()
, performance.timeOrigin
e altre API per le prestazioni che espongono DOMHighResTimestamps
) a 100 microsecondi su tutte le piattaforme.
Abilitando l'isolamento multiorigine, i siti web possono ridurre la limitazione a 5 microsecondi, indipendentemente dalla piattaforma.
Ottenere funzionalità più potenti abilitando l'isolamento multiorigine è un approccio simile per SharedArrayBuffer
.
L'isolamento multiorigine è uno stato in cui una pagina web viene isolata da altre origini, ad eccezione di quelle attivate.
Devo fare qualcosa al riguardo?
Probabilmente no. performance.now()
è stato limitato a risoluzioni molto più approssimative in altri browser
(ad esempio, 1 millisecondo = 0,001 secondi),
quindi non avresti dovuto fare comunque affidamento sulla risoluzione corrente.
Allo stesso tempo, se vuoi usufruire di una risoluzione più elevata per i timer, ad esempio per misurazioni più accurate delle prestazioni, devi assicurarti che il tuo sito sia isolato multiorigine. Ciò ti offrirebbe una risoluzione migliore sia in Chrome sia in altri browser basati su Chromium, nonché su Firefox.
Cosa hanno a che fare i timer con l'isolamento multiorigine?
I fornitori di browser hanno deciso di limitare i timer a risoluzioni più approssimative (nonché alla disponibilità di SharedArrayBuffers che possono essere usati come timer impliciti) quando Spectre è stato rilevato. Questo perché Spectre, e simili attacchi di esecuzione speculativa, si basano su timer per misurare il tempo impiegato da determinate operazioni, quindi indovinano i contenuti della memoria del processo.
Mentre gli attacchi di esecuzione speculativa possono essere eseguiti con timer approssimativi, i timer ad alta risoluzione possono accelerarli. Chrome ha utilizzato la propria architettura di isolamento dei siti, oltre ad altri meccanismi, per ridurre il rischio e riattivare queste funzionalità, ma è limitata solo alle piattaforme desktop e ai browser Chromium. Fare in modo che le API si basino sull'architettura sottostante del browser non è l'ideale.
L'isolamento multiorigine fornisce la base di riferimento standard per consentire ai browser di eseguire pagine in un ambiente isolato, in modo da non essere in grado di caricare risorse multiorigine indesiderate e, di conseguenza, non sono a rischio per Spectre.
Grazie all'isolamento multiorigine,
ora possiamo consentire alle pagine di accedere a timer ad alta risoluzione,
SharedArrayBuffer
e altre API non sicure da esporre nei processi che possono leggere dati multiorigine arbitrari.
Per saperne di più sullo sfondo di questa modifica, leggi l'articolo Perché è necessario "isolamento multiorigine" per le funzionalità avanzate.
Foto di copertina di Linda Perez Johannessen su Unsplash.