Menyelaraskan timer dengan pembatasan isolasi lintas asal

Sebelum versi 91, resolusi timer di Chrome dibatasi hingga 5 mikrodetik di desktop, tempat isolasi situs diaktifkan, dan hingga 100 mikrodetik di Android, tempat fitur ini tidak diaktifkan.

Mulai versi 91, setelah perubahan spesifikasi, Chrome akan membatasi resolusi timer eksplisit (performance.now(), performance.timeOrigin, dan API performa lainnya yang mengekspos DOMHighResTimestamps) hingga 100 mikrodetik di seluruh platform. Dengan mengaktifkan isolasi lintas asal, situs dapat melonggarkan batasan menjadi 5 mikrodetik, terlepas dari platformnya.

Mendapatkan kemampuan yang lebih canggih dengan mengaktifkan isolasi lintas origin adalah pendekatan serupa yang diterapkan pada SharedArrayBuffer. Isolasi lintas-asal adalah status saat halaman web diisolasi dari origin lain, kecuali origin yang memilih ikut.

Apakah saya perlu melakukan sesuatu?

Mungkin tidak. performance.now() telah dibatasi untuk resolusi yang jauh lebih kasar di browser lain (misalnya, 1 milidetik = 0,001 detik), jadi Anda seharusnya tidak mengandalkan resolusi saat ini.

Pada saat yang sama, jika ingin mendapatkan manfaat dari resolusi yang lebih tinggi untuk timer, misalnya untuk pengukuran performa yang lebih akurat, Anda harus memastikan situs Anda diisolasi lintas origin. Tindakan ini akan memberi Anda resolusi yang lebih baik di Chrome dan browser berbasis Chromium lainnya, serta Firefox.

Apa hubungan timer dengan isolasi lintas asal?

Vendor browser memutuskan untuk membatasi timer ke resolusi yang lebih kasar (serta ketersediaan SharedArrayBuffer yang dapat digunakan sebagai timer implisit) saat Spectre ditemukan. Hal ini karena Spectre, dan serangan eksekusi spekulatif serupa, mengandalkan timer untuk mengukur waktu yang diperlukan operasi tertentu, lalu menebak konten memori proses.

Meskipun serangan eksekusi spekulatif dapat dijalankan dengan timer kasar, timer beresolusi tinggi dapat mempercepatnya. Chrome menggunakan arsitektur isolasi situs, serta mekanisme lainnya, untuk mengurangi risiko dan mengaktifkan kembali fungsi tersebut, tetapi hanya terbatas pada platform desktop dan browser Chromium. Memiliki API yang mengandalkan arsitektur browser yang mendasarinya bukanlah hal yang ideal.

Isolasi lintas origin memberikan dasar pengukuran standar bagi browser untuk menjalankan halaman di lingkungan terisolasi sehingga tidak dapat memuat resource lintas origin yang tidak diinginkan, sehingga tidak berisiko terkena Spectre. Dengan isolasi lintas origin, sekarang kita dapat mengizinkan halaman mengakses timer beresolusi tinggi, SharedArrayBuffer, dan API lainnya yang tidak aman untuk diekspos dalam proses yang dapat membaca data lintas origin arbitrer.

Untuk mempelajari lebih lanjut latar belakang perubahan ini, baca Alasan Anda memerlukan "cross-origin isolated" untuk fitur yang canggih.

Foto sampul oleh Linda Perez Johannessen di Unsplash.