Partisi Penyimpanan

Untuk memperkuat privasi pengguna dan memerangi pelacakan lintas situs saluran samping, Chrome kini mengisolasi sebagian besar API penyimpanan dan komunikasi dalam konteks pihak ketiga melalui proses yang disebut partisi penyimpanan.

Status penerapan

Fitur ini telah diaktifkan untuk semua pengguna di Chrome 115 dan yang lebih baru. Upaya partisi penyimpanan serupa juga diterapkan atau direncanakan di browser utama lainnya seperti Firefox dan Safari. Proposal Pemartisian Penyimpanan di GitHub terbuka untuk diskusi lebih lanjut.

Apa itu 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, situs yang disematkan dapat menyimpulkan status tertentu tentang pengguna di situs tingkat teratas menggunakan teknik saluran samping seperti Serangan Timing, XS-Leaks, dan COSI.

Secara historis, penyimpanan hanya dikunci 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 diaktifkannya partisi penyimpanan pihak ketiga, penyimpanan untuk example.com ada di dua partisi yang berbeda, satu untuk a.com dan yang lainnya untuk b.com.

Secara umum, partisi berarti data yang ditulis oleh API penyimpanan seperti Local Storage dan IndexedDB dalam iframe tidak lagi dapat diakses oleh semua konteks yang berbagi origin yang sama. Sebagai gantinya, data tersebut kini diisolasi dan hanya tersedia untuk konteks yang memiliki origin yang sama dan situs tingkat teratas yang sama.

Sebelum

API penyimpanan tanpa partisi.
Sebelum partisi penyimpanan, example.com dapat menulis data saat disematkan di a.com, lalu membacanya saat disematkan di b.com.

Setelah

API Storage dengan partisi.
Setelah partisi penyimpanan, example.com, saat disematkan di b.com, tidak dapat mengakses penyimpanan example.com saat disematkan di a.com.

Partisi penyimpanan di iframe yang dirantai

Kompleksitas partisi penyimpanan meningkat secara signifikan jika iframe bertingkat, terutama jika origin yang sama muncul beberapa kali dalam rantai.

Misalnya, A1 berisi iframe untuk B yang berisi iframe untuk A2 dan A1 dan A2 berada di situs yang sama. Jika partisi hanya mempertimbangkan situs tingkat teratas dan origin frame saat ini, iframe A2 mungkin keliru dianggap sebagai 'pihak pertama' karena berbagi situs dengan tingkat teratas (A1), meskipun ada iframe lintas situs B di antaranya. 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 menambahkan "bit ancestor" ke kunci partisi penyimpanan. Bit ini disetel jika ada dokumen antara iframe saat ini dan situs tingkat teratas yang berasal dari origin yang berbeda (lintas situs). Dalam kasus ini, Situs B bersifat lintas situs sehingga bit akan ditetapkan untuk A2 dan penyimpanannya akan dipartisi dari A1.

Jika rantai iframe hanya terdiri dari konteks situs yang sama (misalnya, Situs A1 berisi A2, yang kemudian berisi A3), bit ancestor tidak akan mempartisi penyimpanannya lebih lanjut. Dalam kasus tersebut, penyimpanan mereka tetap dibagikan, yang diidentifikasi berdasarkan asal umum dan situs tingkat atas mereka.

Untuk situs yang memerlukan akses tanpa partisi di seluruh iframe berantai, Chrome sedang bereksperimen dengan memperluas Storage Access API untuk mengaktifkan kasus penggunaan ini. Karena Storage Access API mengharuskan situs dalam frame untuk memanggil API secara eksplisit, hal ini mengurangi risiko clickjacking.

Perubahan API karena partisi

API yang terpengaruh oleh partisi dapat dibagi menjadi grup 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.
    Metode navigator.storage.estimate() kini memberikan informasi khusus untuk partisi penyimpanan. API khusus Chrome seperti window.webkitStorageInfo dan navigator.webkitTemporaryStorage tidak digunakan lagi.
    IndexedDB dan Penyimpanan cache menggunakan sistem kuota yang dipartisi.
  • Web Storage API
    Web Storage API menyediakan mekanisme yang memungkinkan browser menyimpan pasangan nilai kunci. Ada dua mekanisme: Penyimpanan Lokal dan Penyimpanan Sesi. Objek ini tidak dikelola kuotanya, tetapi tetap dipartisi.
  • Origin Private File System
    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 langsung ke disk. Konten ini tetap dapat diakses pengguna, tetapi sekarang dipartisi.
  • Storage Bucket API
    Storage Bucket API sedang dikembangkan untuk Storage Standard yang menggabungkan berbagai API penyimpanan seperti IndexedDB dan localStorage dengan menggunakan konsep baru yang disebut bucket. Data yang disimpan dalam 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. Menggunakan header hanya menghapus penyimpanan dalam satu partisi.
  • Penyimpanan URL Blob
    URL Blob memberikan akses ke blob, objek yang menyimpan data mentah. Tanpa partisi penyimpanan, URL blob yang dibuat di iframe pihak ketiga di satu situs dapat digunakan di iframe yang sama originnya yang disematkan di situs lain. Misalnya, jika iframe example.com disematkan di a.com dan b.com, URL blob yang dibuat di iframe yang disematkan di a.com dapat diteruskan ke dan kemudian digunakan oleh iframe yang disematkan di b.com tanpa batasan apa pun. Mulai Chrome 137 (dirilis 27 Mei 2025), URL Blob dipartisi untuk semua penggunaan kecuali navigasi tingkat teratas. Kasus yang kini akan diblokir mencakup saat URL blob lintas partisi digunakan dengan fetch() atau sebagai nilai atribut src untuk berbagai elemen HTML. Navigasi tingkat teratas, seperti memanggil window.open() atau mengklik link dengan target='_blank', ke URL Blob tidak akan diblokir jika lintas partisi, tetapi noopener akan diterapkan jika situs URL blob merupakan lintas situs dari situs tingkat teratas halaman yang memulai navigasi. Jika noopener diterapkan, dokumen yang memulai navigasi tidak akan mendapatkan handle jendela untuk dokumen URL blob yang dibukanya. Pada contoh sebelumnya, partisi akan mencegah iframe di b.com mengambil konten URL blob, tetapi iframe tersebut masih dapat window.open().

API Komunikasi

Selain API penyimpanan, API komunikasi yang memungkinkan satu konteks berkomunikasi di seluruh batas origin juga dipartisi. Perubahan ini terutama memengaruhi API yang memungkinkan penemuan konteks lain menggunakan siaran atau pertemuan asal yang sama.

Karena partisi, API komunikasi berikut mencegah iframe pihak ketiga bertukar data dengan konteks origin yang sama:

  • Channel Siaran
    Broadcast Channel API memungkinkan komunikasi antara konteks penjelajahan (jendela, tab, atau iframe) dan pekerja dari asal yang sama.
    Perilaku iframe lintas situs postMessage() tidak diusulkan untuk diubah, karena hubungan antara konteks tersebut sudah ditentukan dengan jelas.
  • SharedWorker
    SharedWorker API menyediakan pekerja yang dapat diakses di seluruh konteks penjelajahan dengan origin yang sama.
  • Web Locks
    Web Locks API memungkinkan kode yang berjalan di satu tab atau pekerja dengan origin yang sama untuk mendapatkan kunci bagi resource bersama saat beberapa tugas sedang dilakukan.

Service Worker API

Service Worker API memungkinkan situs melakukan tugas di latar belakang. Situs mendaftarkan pekerja layanan yang membuat konteks pekerja baru untuk merespons peristiwa. Secara tradisional, pekerja ini dapat berkomunikasi dengan konteks asal yang sama. Namun, karena pekerja layanan dapat mengubah waktu permintaan navigasi, mereka menimbulkan risiko kebocoran informasi lintas situs seperti pengintaian histori.

Oleh karena itu, Service Worker yang terdaftar dari konteks pihak ketiga kini dipartisi.

Extension 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. Dalam skenario ini, halaman ekstensi terus memiliki akses ke partisi tingkat teratasnya. Ekstensi juga dapat menyematkan situs lain; saat melakukannya, situs yang disematkan tersebut akan mengakses partisi level teratasnya, asalkan ekstensi memiliki izin host untuk situs tersebut.

Untuk mengetahui informasi selengkapnya, lihat dokumen ekstensi.

Demo: menguji partisi penyimpanan

Situs demo: https://storage-partitioning-demo-site-a.glitch.me/

Situs demo yang menampilkan tanda centang hijau di sebelah kiri dan tanda silang merah di sebelah kanan.
Screenshot demo, yang menampilkan output untuk browser dengan partisi penyimpanan di sebelah kiri, dan tanpa partisi penyimpanan di sebelah kanan.

Demo ini menggunakan dua situs: situs A dan situs B.

  • Saat Anda membuka situs A dalam konteks tingkat teratas, situs tersebut akan menetapkan data menggunakan berbagai metode penyimpanan.
  • Situs B menyematkan halaman dari situs A dan sematan 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 --disable-features=ThirdPartyStoragePartitioning pengalihan command line. Catatan: Switch command line ini ditujukan untuk tujuan pengembangan dan pengujian serta dapat dihapus atau diubah di Chrome versi mendatang.

Anda juga dapat menguji browser lain dengan cara yang sama untuk melihat status partisi mereka.

Meminta waktu migrasi tambahan

Untuk situs yang memerlukan waktu tambahan untuk memigrasikan dependensinya, uji coba penghentian penggunaan DisableThirdPartyStoragePartitioning3 kini diperpanjang. Uji coba ini menawarkan mekanisme sementara bagi situs tingkat teratas untuk memilih ikut serta dalam penyimpanan yang tidak dipartisi, pekerja layanan, dan API komunikasi untuk konteks pihak ketiga yang disematkan di halaman mereka.

Buka Perpanjangan uji coba penghentian penggunaan Partisi Penyimpanan untuk mempelajari lebih lanjut.

Berinteraksi dan memberikan masukan