Setiap cookie berisi pasangan nilai kunci bersama dengan sejumlah atribut yang mengontrol kapan dan di mana cookie tersebut digunakan.
Pengenalan atribut SameSite
(ditentukan di
RFC6265bis)
memungkinkan Anda mendeklarasikan apakah cookie Anda dibatasi untuk pihak pertama atau
konteks situs yang sama. Sangat membantu untuk memahami
dengan tepat apa 'situs' di sini.
Situs adalah kombinasi dari akhiran domain
dan bagian dari domain yang
sebelumnya. Misalnya, domain www.web.dev
adalah bagian dari situs web.dev
.
Istilah penting: Jika pengguna menggunakan www.web.dev
dan meminta gambar dari
static.web.dev
, itu adalah permintaan situs yang sama.
Daftar akhiran publik menentukan halaman yang dihitung sebagai
berada di situs yang sama. Ini tidak hanya bergantung pada domain level teratas seperti .com
,
tetapi juga dapat mencakup layanan seperti github.io
. Hal ini memungkinkan
your-project.github.io
dan my-project.github.io
agar dihitung sebagai situs terpisah.
Istilah penting: Jika pengguna menggunakan your-project.github.io
dan meminta gambar dari
my-project.github.io
yang merupakan permintaan lintas situs.
Menggunakan atribut SameSite
untuk mendeklarasikan penggunaan cookie
Atribut SameSite
pada cookie menyediakan tiga cara berbeda untuk mengontrol
perilaku ini. Anda dapat memilih untuk tidak menentukan atribut, atau Anda dapat menggunakan
Strict
atau Lax
untuk membatasi cookie ke permintaan situs yang sama.
Jika Anda menetapkan SameSite
ke Strict
, cookie Anda hanya dapat dikirim di
konteks pihak pertama; yaitu, jika situs untuk cookie cocok dengan situs yang ditampilkan
di kolom URL browser. Jadi, jika cookie promo_shown
ditetapkan sebagai berikut:
Set-Cookie: promo_shown=1; SameSite=Strict
Saat pengguna berada di situs Anda, cookie akan dikirim dengan permintaan seperti yang diharapkan.
Namun, jika pengguna mengikuti link ke situs Anda dari link lain, cookie
tidak dikirim pada permintaan awal tersebut.
Ini bagus untuk cookie yang berkaitan dengan fitur yang selalu berada di belakang
navigasi Anda, seperti mengubah sandi atau melakukan pembelian, tetapi hal tersebut terlalu
membatasi cookie seperti promo_shown
. Jika pembaca mengikuti link tersebut
ke situs, mereka ingin cookie dikirim sehingga preferensi mereka dapat diterapkan.
SameSite=Lax
memungkinkan browser mengirim cookie dengan cookie tingkat atas ini
navigasi. Misalnya, jika situs lain mereferensikan konten situs Anda,
dalam kasus ini, menggunakan foto kucing Anda dan memberikan tautan ke artikel sebagai
berikut ini:
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
Dengan cookie yang ditetapkan ke Lax
sebagai berikut:
Set-Cookie: promo_shown=1; SameSite=Lax
Ketika browser meminta amazing-cat.png
untuk blog orang lain,
situs tersebut tidak mengirimkan cookie. Namun, jika pembaca mengikuti
tertaut ke cat.html
di situs Anda, permintaan tersebut menyertakan cookie.
Sebaiknya gunakan SameSite
dengan cara ini, setel cookie yang memengaruhi situs
ditampilkan ke Lax
, dan cookie yang terkait dengan tindakan pengguna untuk Strict
.
Anda juga dapat menetapkan SameSite
ke None
untuk menunjukkan bahwa Anda ingin cookie
dikirim dalam semua konteks. Jika Anda menyediakan layanan yang digunakan situs lain seperti
widget, konten yang disematkan, program afiliasi, iklan, atau login di
beberapa situs, gunakan None
untuk memastikan maksud Anda jelas.
Perubahan pada perilaku default tanpa SameSite
Dukungan Browser
Atribut SameSite
didukung secara luas, tetapi belum diadopsi secara luas.
Sebelumnya, menyetel cookie tanpa SameSite
secara default menetapkan cookie agar dikirim ke
semua konteks, sehingga membuat pengguna rentan terhadap CSRF dan
kebocoran informasi. Untuk mendorong developer menyatakan niat mereka
dan memberikan pengalaman yang
lebih aman kepada pengguna, proposal IETF,
Cookie yang Semakin Baik
menjabarkan dua perubahan utama:
- Cookie tanpa atribut
SameSite
diperlakukan sebagaiSameSite=Lax
. - Cookie dengan
SameSite=None
juga harus menentukanSecure
, yang berarti cookie tersebut memerlukan konteks yang aman.
Kedua perubahan ini kompatibel dengan versi lama browser yang telah
menerapkan atribut SameSite
versi sebelumnya, serta
browser yang tidak mendukung versi SameSite
sebelumnya. Aplikasi tersebut dimaksudkan untuk
mengurangi kebutuhan developer pengandalan pada browser perilaku default dengan membuat cookie
perilaku pengguna dan tujuan penggunaan yang jelas. Setiap klien yang tidak mengenali
SameSite=None
harus mengabaikannya.
SameSite=Lax
secara default
Jika Anda mengirim cookie tanpa menentukan atribut SameSite
, browser
memperlakukan cookie tersebut seolah-olah disetel ke SameSite=Lax
. Kami tetap merekomendasikan
menyetel SameSite=Lax
secara eksplisit untuk membuat pengalaman pengguna Anda lebih konsisten
di seluruh browser.
SameSite=None
harus aman
Saat membuat cookie lintas situs menggunakan SameSite=None
, Anda juga harus menetapkannya
ke Secure
agar browser menerimanya:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Anda dapat menguji perilaku ini mulai Chrome 76 dengan mengaktifkan
about://flags/#cookies-without-same-site-must-be-secure
, dan dari Firefox 69
dengan menetapkan network.cookie.sameSite.noneRequiresSecure
di
about:config
Sebaiknya update cookie yang ada ke Secure
sesegera mungkin.
Jika Anda mengandalkan layanan yang menyediakan konten pihak ketiga di situs Anda, pastikan
penyedia layanan Anda memperbarui cookie mereka, dan memperbarui cuplikan atau
pada situs Anda untuk memastikannya menggunakan perilaku baru.
Resep kue SameSite
Untuk detail lebih lanjut tentang cara memperbarui cookie agar berhasil menangani masalah ini
perubahan pada SameSite=None
dan perbedaan pada perilaku browser, lihat
artikel lanjutan, resep cookie SameSite.
Terima kasih atas kontribusi dan masukan dari Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner, dan Vivek Sekhar.
Banner besar cookie oleh Pille-Riin Priske aktif Buka Pembukaan