Untuk mencegah jenis pelacakan lintas situs saluran samping tertentu, Chrome telah mempartisi sebagian besar API penyimpanan dan komunikasi dalam konteks pihak ketiga.
Status penerapan
Fitur ini telah diaktifkan untuk semua pengguna di Chrome 115 dan yang lebih baru. Proposal Partisi Penyimpanan terbuka untuk diskusi lebih lanjut.
Apa yang dimaksud dengan partisi penyimpanan?
Untuk mencegah jenis pelacakan lintas situs saluran samping tertentu, Chrome mempartisi API penyimpanan dan komunikasi dalam konteks pihak ketiga.
Tanpa partisi penyimpanan, situs dapat menggabungkan data di berbagai situs untuk melacak pengguna di seluruh web. Selain itu, hal ini memungkinkan situs tersemat menyimpulkan status tertentu tentang pengguna di situs tingkat atas menggunakan teknik side-channel seperti Serangan Waktu, XS-Leaks, dan COSI.
Secara historis, penyimpanan hanya diberi kunci berdasarkan asal. Artinya, jika
iframe dari example.com
disematkan di a.com
dan b.com
, iframe tersebut dapat mempelajari
kebiasaan penjelajahan Anda untuk kedua situs tersebut dengan menyimpan dan berhasil
mengambil ID dari penyimpanan. Dengan mengaktifkan partisi penyimpanan pihak ketiga,
penyimpanan untuk example.com
ada dalam dua partisi yang berbeda, satu untuk a.com
dan satu lagi untuk b.com
.
Partisi umumnya berarti bahwa data yang disimpan oleh API penyimpanan seperti penyimpanan lokal dan IndexedDB oleh iframe tidak dapat lagi diakses oleh semua konteks di origin yang sama. Sebagai gantinya, data hanya tersedia untuk konteks dengan origin dan situs tingkat teratas yang sama.
Partisi penyimpanan di iframe berantai
Jika iframe berisi iframe, hal ini akan menjadi lebih rumit. Hal ini terutama berlaku jika origin yang sama berada di lebih dari satu tempat dalam rantai.
Misalnya, A1 berisi iframe untuk B yang berisi iframe untuk A2 dan A1 dan A2 berada di situs yang sama. Jika kita hanya mempertimbangkan konteks tingkat atas dan tingkat saat ini saat mempartisi, iframe A2 dapat dianggap sebagai pihak pertama karena berada di situs yang sama dengan tingkat atas (A1) meskipun ada iframe pihak ketiga yang mengganggu (B). Hal ini dapat membuat A2 rentan terhadap risiko keamanan seperti clickjacking jika A2 memiliki akses ke penyimpanan yang tidak dipartisi secara default.
Untuk mengatasi hal ini, Chrome menyertakan "bit ancestor" tambahan sebagai bagian dari kunci partisi penyimpanan, yang ditetapkan jika ada dokumen antara konteks saat ini dan konteks tingkat teratas yang bersifat lintas situs ke konteks saat ini. Dalam hal ini, Situs B bersifat lintas situs sehingga bit akan ditetapkan untuk A2 dan penyimpanannya akan dipartisi dari A1.
Jika tidak ada konteks lintas situs dalam rantai, penyimpanan tidak akan dipartisi. Misalnya, Situs A1 yang berisi iframe untuk A2 yang berisi iframe untuk A3 tidak akan dipartisi untuk A1, A2, atau A3 karena semuanya berada di situs yang sama.
Untuk situs yang memerlukan akses tanpa partisi di seluruh iframe berantai, Chrome bereksperimen dengan memperluas Storage Access API untuk mengaktifkan kasus penggunaan ini. Karena Storage Access API mengharuskan situs yang dibingkai untuk memanggil API secara eksplisit, hal ini mengurangi risiko clickjacking.
API yang diperbarui
API yang terpengaruh oleh partisi dapat dibagi menjadi pengelompokan berikut:
Storage API
- Sistem kuota
- Sistem kuota digunakan untuk menentukan jumlah ruang disk yang dialokasikan untuk penyimpanan. Sistem kuota mengelola setiap partisi sebagai bucket terpisah untuk menentukan jumlah ruang yang diizinkan, dan kapan ruang tersebut dikosongkan.
navigator.storage.estimate()
menampilkan informasi partisi. API khusus Chrome sepertiwindow.webkitStorageInfo
dannavigator.webkitTemporaryStorage
tidak akan digunakan lagi.- IndexedDB dan Penyimpanan cache menggunakan sistem kuota partisi baru.
- Web Storage API
- Web Storage API menyediakan mekanisme yang dapat digunakan browser untuk menyimpan pasangan nilai kunci. Ada dua mekanisme: Penyimpanan Lokal dan Penyimpanan Sesi. Saat ini, bucket tersebut tidak dikelola kuota, tetapi masih dipartisi.
- Sistem File Pribadi Origin
- File System Access API memungkinkan situs membaca atau menyimpan perubahan langsung ke file dan folder di perangkat setelah pengguna memberikan akses. Origin Private File System memungkinkan origin menyimpan konten pribadi ke disk yang dapat diakses dengan mudah oleh pengguna, dan dipartisi.
- Storage Bucket API
- Storage Bucket API sedang dikembangkan untuk Storage Standard yang menggabungkan berbagai API penyimpanan seperti IndexedDB dan localStorage menggunakan konsep baru yang disebut bucket. Data yang disimpan di bucket dan metadata yang terkait dengan bucket dipartisi.
- Header Clear-Site-Data
- Menyertakan header
Clear-Site-Data
dalam respons memungkinkan server meminta untuk menghapus data yang disimpan di browser pengguna. Cache, cookie, dan penyimpanan DOM dapat dihapus. Penggunaan header hanya akan menghapus penyimpanan dalam satu partisi.
- Penyimpanan URL Blob
- Blob adalah objek yang berisi data mentah yang akan diproses, dan URL blob dapat dibuat untuk mengakses resource. Penyimpanan URL blob tidak dipartisi. Untuk mendukung kasus penggunaan navigasi dalam konteks tingkat teratas ke URL blob apa pun (diskusi), penyimpanan URL blob dapat dipartisi oleh cluster agen, bukan situs tingkat teratas. Fitur ini belum tersedia untuk pengujian, dan mekanisme partisi dapat berubah pada masa mendatang.
API Komunikasi
Bersama dengan API penyimpanan, API komunikasi yang memungkinkan satu konteks untuk berkomunikasi di seluruh batas origin juga dipartisi. Perubahan ini terutama memengaruhi API yang memungkinkan penemuan konteks lain melalui siaran atau rendezvous dengan origin yang sama.
Untuk API komunikasi berikut, iframe pihak ketiga tidak dapat lagi berkomunikasi dengan konteks origin yang sama:
- Channel Siaran
- Broadcast Channel API memungkinkan komunikasi antara konteks penjelajahan (jendela, tab, atau iframe) dan pekerja dari origin yang sama.
- Iframe lintas situs
postMessage()
dengan hubungan antara konteks yang ditentukan dengan jelas tidak diusulkan untuk diubah.
- SharedWorker
- SharedWorker API menyediakan pekerja yang dapat diakses di seluruh konteks penjelajahan dari origin yang sama.
- Kunci Web
- Web Locks API memungkinkan kode yang berjalan di satu tab atau pekerja dari asal yang sama untuk mendapatkan kunci untuk resource bersama saat beberapa tugas dilakukan.
Service Worker API
Service Worker API menyediakan antarmuka untuk melakukan tugas di latar belakang. Situs membuat pendaftaran persisten yang membuat konteks pekerja baru untuk merespons peristiwa, dan pekerja tersebut dapat berkomunikasi dengan konteks dengan origin yang sama. Selain itu, Service Worker API dapat mengubah waktu permintaan navigasi yang mengarah ke potensi kebocoran informasi lintas situs seperti sniffing histori.
Oleh karena itu, Pekerja Layanan yang terdaftar dari konteks pihak ketiga dipartisi.
Extensions API
Ekstensi adalah program yang memungkinkan pengguna menyesuaikan pengalaman penjelajahan mereka.
Halaman ekstensi (halaman dengan skema chrome-extension://
) dapat disematkan di
situs di seluruh web, dan dalam hal ini, halaman tersebut akan terus memiliki akses ke
partisi tingkat teratas.
Halaman ini juga dapat menyematkan situs lain, dalam hal ini situs tersebut akan memiliki
akses ke partisi level teratas selama ekstensi memiliki
izin host
untuk situs tersebut.
Untuk informasi selengkapnya, lihat dokumen ekstensi.
Demo: menguji partisi penyimpanan
Situs demo: https://storage-partitioning-demo-site-a.glitch.me/

Demo ini menggunakan dua situs: situs A dan situs B.
- Saat Anda mengunjungi situs A dalam konteks tingkat teratas, situs tersebut akan menetapkan data menggunakan berbagai metode penyimpanan.
- Situs B menyematkan halaman dari situs A dan penyematan tersebut mencoba membaca opsi penyimpanan yang ditetapkan sebelumnya.
- Saat disematkan di situs B, situs A tidak memiliki akses ke data tersebut saat penyimpanan dipartisi sehingga pembacaan gagal.
- Demo ini menggunakan keberhasilan atau kegagalan setiap pembacaan untuk menunjukkan apakah data dipartisi.
Untuk saat ini, Anda dapat menonaktifkan partisi penyimpanan di Chrome menggunakan tombol command line --disable-features=ThirdPartyStoragePartitioning
.
Anda juga dapat menguji browser lain dengan cara yang sama untuk melihat status partisiannya.
Berinteraksi dan memberikan masukan
- GitHub: Baca proposal asli, ajukan pertanyaan, dan berpartisipasi dalam diskusi.
- Dukungan developer: Ajukan pertanyaan dan bergabunglah dalam diskusi di repo Dukungan Developer Privacy Sandbox.
- Melaporkan bug: Laporkan bug di pelacak Chromium jika Anda yakin ada sesuatu yang tidak berfungsi seperti yang diharapkan.