Membatasi berbagi modul Wasm ke origin yang sama

Berbagi modul WebAssembly di antara lingkungan situs yang sama akan dibatasi hanya untuk origin yang sama.

Berbagi modul WebAssembly (Wasm) antara lingkungan situs yang sama, tetapi lintas origin akan tidak digunakan lagi untuk mengizinkan cluster agen untuk tercakup ke origin dalam jangka panjang. Developer yang menggunakan modul Wasm dalam harus memastikan untuk membuat instance modul tersebut di origin yang sama untuk melanjutkan menggunakannya setelah Chrome 95.

Apa itu modul Wasm dan cara kerjanya

Program WebAssembly diatur ke dalam modul, yang merupakan unit dari deployment, pemuatan, dan kompilasi.

Dalam kode contoh berikut, modul Wasm yang diimpor dari https://iframe.site.example dibagikan kepada https://main.site.example melalui postMessage(). Perhatikan bahwa domain ini situs yang sama, tetapi lintas origin.

Modul Wasm di https://iframe.site.example:

(async () => {
  const instance = await WebAssembly.instantiateStreaming(fetch('./add.wasm'), {});
  iframe.contentWindow.postMessage(instance.module, `https://main.site.example`);
})();

Mulai Chrome 95, pengirim dan penerima harus berasal dari origin yang sama. Di beberapa dalam kasus di atas, https://iframe.site.example harus https://main.site.example atau sebaliknya.

Mengapa hal ini diperlukan

Chrome telah menangani secara internal berbagai dokumen, tab, dan {i>frame<i} pada cluster agen sesuai situs. Ini berarti dokumen di lokasi yang sama ditangani di dalam proses yang sama (cara kerjanya berbeda-beda untuk setiap browser). Baru-baru ini, Chrome kita mulai menanganinya dalam unit yang lebih terperinci: {i>origin<i}. Kami menyebutnya cluster agen sesuai origin. Namun, karena hal itu mahal, cluster agen sesuai origin hanya diterapkan ke situs terbatas secara heuris.

Rencananya adalah membuat semua cluster agen sesuai dengan originnya secara default. Untuk untuk mencapainya, kita perlu membatasi kemampuan yang mengharuskan kunci cluster origin:

  • (Khusus Chrome) Anda tidak dapat lagi mengirim SharedArrayBuffer atau WebAssembly.Memory ke halaman lintas origin situs yang sama lainnya. Hal ini sudah diterapkan sejak Chrome 92.
  • Anda tidak dapat lagi mengirim WebAssembly.Module objek ke halaman lintas origin situs yang sama lainnya melalui postMessage(). Perubahan ini dijelaskan secara lebih mendetail di bawah.
  • Anda tidak dapat lagi menetapkan document.domain Ini adalah fitur lama yang biasanya mengizinkan halaman lintas origin situs yang sama untuk secara sinkron mengakses DOM satu sama lain, tetapi dalam cluster agen sesuai origin, dinonaktifkan.

Dengan mengatasi semua perubahan di atas, Chrome akan beralih untuk menggunakan agen sesuai origin cluster secara default.

Untuk mempelajari lebih lanjut cluster agen sesuai origin, lihat Meminta isolasi performa dengan header Origin-Agent-Cluster.

Langkah selanjutnya dan sumber daya

Agar Chrome berfungsi dengan cluster agen sesuai origin secara default, kami akan membuat document.domain hanya baca. Tim Chrome ingin menerapkan perubahan ini sekitar tahun 2022.

Foto oleh Markus Winkler nyala Buka Percikan