Izinkan developer mengikutsertakan cookie ke penyimpanan "dipartisi", dengan wadah cookie terpisah per situs tingkat atas.
Status penerapan
- Didukung secara default di Chrome 114 dan versi yang lebih baru.
- Uji coba origin, yang kini telah selesai, tersedia mulai dari Chrome 100 hingga 116.
- Baca Intent to Experiment dan Intent to Ship.
Apa itu CHIPS?
Dengan Cookie Memiliki Status Partisi Independen (CHIPS), developer dapat mengikutsertakan cookie ke penyimpanan terpartisi, dengan wadah cookie terpisah per situs tingkat atas, sehingga meningkatkan privasi dan keamanan pengguna.
Tanpa partisi, cookie pihak ketiga dapat mengaktifkan layanan untuk melacak pengguna dan menggabungkan informasi mereka dari berbagai situs tingkat atas yang tidak terkait. Ini dikenal sebagai pelacakan lintas situs.
Browser sedang dalam proses menghentikan cookie pihak ketiga yang tidak dipartisi secara bertahap, sehingga CHIPS, Storage Access API, dan Set Situs Terkait akan menjadi satu-satunya cara untuk membaca dan menulis cookie dari konteks lintas situs, seperti iframe, saat cookie pihak ketiga diblokir.
CHIPS memperkenalkan atribut cookie baru, Partitioned
, untuk mendukung cookie lintas situs yang dipartisi berdasarkan konteks tingkat atas.
Header Set-Cookie:
Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;
JavaScript:
document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"
Cookie pihak ketiga yang dipartisi dikaitkan dengan situs tingkat teratas tempat cookie tersebut pertama kali ditetapkan dan tidak dapat diakses dari tempat lain. Dengan cara ini, cookie yang ditetapkan oleh layanan pihak ketiga hanya dapat dibaca dalam konteks tersemat yang sama dari situs tingkat teratas tempat cookie pertama kali ditetapkan.
Dengan cookie yang dipartisi, saat pengguna mengunjungi situs A dan konten yang disematkan dari situs C menetapkan cookie dengan atribut yang dipartisi, cookie tersebut akan disimpan dalam stoples berpartisi yang hanya ditetapkan untuk cookie yang ditetapkan oleh situs C saat disematkan di situs A. Browser hanya akan mengirim cookie tersebut jika situs tingkat atas adalah A.
Saat pengguna mengunjungi situs baru, misalnya situs B, bingkai C tersemat tidak akan menerima cookie yang ditetapkan saat C disematkan di situs A.
Jika pengguna mengunjungi situs C sebagai situs tingkat teratas, cookie terpartisi yang ditetapkan C saat disematkan di A juga tidak akan dikirim dalam permintaan tersebut.
Kasus penggunaan
Misalnya, situs retail.example
mungkin ingin bekerja sama dengan layanan pihak ketiga support.chat.example
untuk menyematkan kotak chat dukungan di situsnya. Banyak layanan chat yang dapat disematkan saat ini mengandalkan cookie untuk menyimpan status.
Tanpa kemampuan untuk menetapkan cookie lintas situs, support.chat.example
perlu menemukan metode alternatif yang seringkali lebih kompleks untuk menyimpan status. Atau, skrip ini perlu disematkan di halaman level atas yang menimbulkan risiko karena memungkinkan skrip support.chat.example
memiliki hak istimewa yang ditingkatkan di retail.example, seperti kemampuan untuk mengakses cookie autentikasi.
CHIPS memberikan opsi yang lebih mudah untuk terus menggunakan cookie lintas situs, tanpa risiko yang terkait dengan cookie yang tidak dipartisi.
Contoh kasus penggunaan CHIPS mencakup skenario saat subresource lintas situs memerlukan beberapa gagasan tentang sesi atau status persisten yang dicakupkan ke aktivitas pengguna di satu situs tingkat atas, seperti:
- Sematan chat pihak ketiga
- Sematan peta pihak ketiga
- Penyematan pembayaran pihak ketiga
- Load balancing CDN subresource
- Penyedia CMS headless
- Domain sandbox untuk menayangkan konten pengguna yang tidak tepercaya (seperti googleusercontent.com dan githubusercontent.com)
- CDN pihak ketiga yang menggunakan cookie untuk menayangkan konten yang aksesnya dikontrol oleh status autentikasi di situs pihak pertama (misalnya, foto profil di situs media sosial yang dihosting di CDN pihak ketiga)
- Framework front-end yang mengandalkan API jarak jauh menggunakan cookie pada permintaannya
- Iklan tersemat yang memerlukan cakupan status per penayang (misalnya, mengambil preferensi iklan pengguna untuk situs tersebut)
Alasan CHIPS menggunakan model partisi keikutsertaan
Saat browser menghentikan cookie pihak ketiga yang tidak dipartisi secara bertahap, beberapa pendekatan lain untuk mempartisi telah dicoba.
Firefox mengumumkan bahwa mereka mempartisi semua cookie pihak ketiga secara default dalam mode ETP Strict dan mode penjelajahan pribadi, sehingga semua cookie lintas situs dipartisi oleh situs tingkat atas. Namun, mempartisi cookie tanpa keikutsertaan pihak ketiga dapat menyebabkan bug yang tidak terduga, karena beberapa layanan pihak ketiga telah membuat server yang mengharapkan cookie pihak ketiga yang tidak dipartisi.
Safari sebelumnya mencoba mempartisi cookie berdasarkan heuristik, tetapi akhirnya memilih untuk memblokirnya sama sekali, yang menyebabkan kebingungan developer sebagai salah satu alasannya. Baru-baru ini, Safari menyatakan minatnya pada model berbasis keikutsertaan.
Hal yang membedakan CHIPS dengan penerapan cookie terpartisi yang ada adalah keikutsertaan pihak ketiga. Cookie harus ditetapkan dengan atribut baru agar dapat dikirim pada permintaan lintas pihak setelah cookie pihak ketiga (yang tidak dipartisi) tidak digunakan lagi.
Meskipun cookie pihak ketiga masih ada, atribut Partitioned
memberikan keikutsertaan untuk jenis perilaku cookie yang lebih ketat dan lebih aman. CHIPS adalah langkah penting untuk membantu layanan melakukan transisi yang lancar ke masa depan tanpa cookie pihak ketiga.
Desain teknis partisi cookie
Saat ini, cookie dimasukkan ke nama host atau domain situs yang menyetelnya, yaitu kunci host-nya.
Misalnya, untuk cookie dari https://support.chat.example
, kunci host-nya adalah ("support.chat.example")
.
Di bagian CHIPS, cookie yang ikut serta dalam partisi akan diberi kunci host dan kunci partisi dua kali.
Kunci partisi cookie adalah situs (domain skema dan yang dapat didaftarkan) URL level teratas yang dikunjungi browser pada awal permintaan ke endpoint yang menetapkan cookie.
Pada contoh sebelumnya, dengan https://support.chat.example
disematkan pada https://retail.example
, URL tingkat teratasnya adalah https://retail.example
.
Kunci partisi dalam kasus tersebut adalah ("https", "retail.example")
.
Demikian juga, kunci partisi permintaan adalah situs URL level teratas yang dikunjungi browser pada awal permintaan. Browser hanya boleh mengirim cookie dengan atribut Partitioned
pada permintaan yang memiliki kunci partisi yang sama dengan cookie tersebut.
Berikut adalah tampilan kunci cookie di contoh sebelumnya sebelum dan sesudah CHIPS.
Sebelum CHIPS
key=("support.chat.example")
Setelah CHIPS
key={("support.chat.example"),("https", "retail.example")}
Desain keamanan
Untuk mendorong praktik keamanan yang baik, dengan CHIPS, cookie hanya disetel oleh dan dikirim melalui protokol yang aman.
- Cookie yang dipartisi harus ditetapkan dengan
Secure
. - Sebaiknya gunakan awalan
__Host
saat menyetel cookie yang dipartisi untuk membuatnya terikat dengan nama host (dan bukan domain yang dapat didaftarkan).
Contoh:
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;
Alternatif selain CHIPS
Storage Access API dan Set Situs Terkait (RWS) terkait adalah mekanisme platform web untuk mengaktifkan akses cookie lintas situs yang terbatas untuk tujuan spesifik yang ditampilkan kepada pengguna.
Ini adalah alternatif untuk partisi CHIPS yang memerlukan akses ke juru masak lintas lokasi dan tidak dipartisi.
Pertimbangkan Storage Access API dan Set Situs Terkait dalam situasi saat Anda memerlukan cookie yang sama agar tersedia untuk layanan yang disematkan di beberapa situs terkait.
CHIPS menyediakan kemampuan bagi layanan untuk bertindak sebagai komponen yang terisolasi di beberapa situs, sehingga cookie yang sama tidak perlu tersedia di beberapa situs. Jika layanan menetapkan cookie yang dipartisi, kunci partisinya akan menjadi situs tingkat atas dan cookie tersebut tidak akan tersedia untuk situs lain yang juga menggunakan layanan tersebut.
Desain Set Situs Terkait mengandalkan Storage Access API dan tidak terintegrasi dengan partisi CHIPS. Jika memiliki kasus penggunaan yang mengandalkan partisi cookie bersama di seluruh situs dalam RWS, Anda dapat memberikan contoh dan masukan tentang masalah GitHub.
Demo
Demo ini akan memandu Anda mempelajari cara kerja cookie yang dipartisi dan cara memeriksanya di DevTools.
Situs A menyematkan iframe dari Situs B yang menggunakan JavaScript untuk menetapkan dua cookie: cookie yang dipartisi dan tidak dipartisi. Situs B menampilkan semua cookie yang dapat diakses dari lokasi tersebut menggunakan document.cookie
.
Jika cookie pihak ketiga diblokir, situs B hanya dapat menetapkan dan mengakses cookie dengan atribut Partitioned
dalam konteks lintas situs.
Jika cookie pihak ketiga diizinkan, situs B juga dapat menetapkan dan mengakses cookie yang tidak dipartisi.
Prasyarat
- Chrome 118 atau yang lebih baru.
- Buka
chrome://flags/#test-third-party-cookie-phaseout
dan aktifkan setelan ini
Menggunakan DevTools untuk memeriksa cookie yang dipartisi
- Kunjungi https://chips-site-a.glitch.me.
- Tekan
Control+Shift+J
(atauCommand+Option+J
di Mac) untuk membuka DevTools. - Klik tab Aplikasi.
- Buka Application > Storage > Cookies.
- Klik
https://chips-site-b.glitch.me
.
DevTools akan menampilkan semua cookie dari asal yang dipilih.
Situs B hanya dapat menetapkan cookie yang dipartisi dalam konteks lintas situs, cookie yang tidak dipartisi akan diblokir:
- Anda akan melihat
__Host-partitioned-cookie
dengan kunci partisi situs tingkat atashttps://chips-site-a.glitch.me
.
- Klik Buka Situs B.
- Di DevTools, buka Application > Storage > Cookies.
- Klik
https://chips-site-b.glitch.me
.
Dalam skenario ini, karena Anda berada di situs B dalam konteks tingkat atas, situs dapat menetapkan dan mengakses kedua cookie:
unpartitioned-cookie
memiliki kunci partisi yang kosong.- Cookie
__Host-partitioned-cookie
memiliki kunci partisihttps://chips-site-b.glitch.me
.
Jika Anda membuka kembali situs A, unpartitioned-cookie
kini disimpan di browser, tetapi tidak akan dapat diakses dari situs A.
- Klik Buka Situs A.
- Klik tab Network
- Klik
https://chips-site-b.glitch.me
. - Klik tab Cookies.
Saat berada di situs A, Anda akan melihat __Host-partitioned-cookie
dengan kunci partisi https://chips-site-a.glitch.me
situs tingkat atas.
Jika Anda mencentang tampilkan permintaan cookie yang difilter, DevTools akan menampilkan bahwa cookie yang tidak dipartisi diblokir, ditandai dengan warna kuning dengan tooltip: "Cookie ini diblokir karena preferensi pengguna".
Di Application > Storage > Cookies, mengklik https://chips-site-b.glitch.me
akan menampilkan:
unpartitioned-cookie
dengan kunci partisi kosong.- Cookie
__Host-partitioned-cookie
dengan kunci partisihttps://chips-site-a.glitch.me
.
Hapus cookie
Untuk mereset demo, hapus semua cookie untuk situs tersebut:
- Tekan
Control+Shift+J
(atauCommand+Option+J
di Mac) untuk membuka DevTools. - Klik tab Aplikasi.
- Buka Application > Storage > Cookies.
- Klik kanan
https://chips-site-b.glitch.me
. - Klik Hapus.
Resource
- GitHub: Baca penjelasan, ajukan pertanyaan, dan ikuti diskusi.
- Dukungan developer: Ajukan pertanyaan dan ikuti diskusi di repositori Dukungan Developer Privacy Sandbox.