Cookie SameSite dijelaskan

Dukungan Browser

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

Sumber

Setiap cookie berisi pasangan nilai kunci beserta sejumlah atribut yang mengontrol waktu dan tempat cookie tersebut digunakan.

Pengenalan atribut SameSite (ditentukan dalam RFC6265bis) memungkinkan Anda mendeklarasikan apakah cookie Anda dibatasi untuk konteks pihak pertama atau situs yang sama. Sebaiknya pahami dengan tepat apa yang dimaksud dengan 'situs' di sini. Situs adalah kombinasi dari akhiran domain dan bagian domain tepat sebelumnya. Misalnya, domain www.web.dev adalah bagian dari situs web.dev.

Istilah kunci: Jika pengguna berada di www.web.dev dan meminta gambar dari static.web.dev, itu adalah permintaan situs yang sama.

Daftar akhiran publik menentukan halaman yang dianggap berada di situs yang sama. Hal ini tidak hanya bergantung pada domain level teratas seperti .com, tetapi juga dapat menyertakan layanan seperti github.io. Hal ini memungkinkan your-project.github.io dan my-project.github.io dihitung sebagai situs terpisah.

Istilah kunci: Jika pengguna berada di your-project.github.io dan meminta gambar dari my-project.github.io, itu adalah permintaan lintas situs.

Gunakan 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 menggunakan Strict atau Lax untuk membatasi cookie ke permintaan situs yang sama.

Jika Anda menetapkan SameSite ke Strict, cookie hanya dapat dikirim dalam 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 situs lain, cookie tidak akan dikirim pada permintaan awal tersebut. Hal ini baik untuk cookie yang terkait dengan fitur yang selalu berada di balik navigasi awal, seperti mengubah sandi atau melakukan pembelian, tetapi terlalu membatasi untuk cookie seperti promo_shown. Jika pembaca mengikuti link ke situs, mereka ingin cookie dikirim sehingga preferensi mereka dapat diterapkan.

SameSite=Lax memungkinkan browser mengirim cookie dengan navigasi tingkat atas ini. Misalnya, jika situs lain mereferensikan konten situs Anda, dalam hal ini dengan menggunakan foto kucing Anda dan memberikan link ke artikel Anda sebagai berikut:

<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

Saat browser meminta amazing-cat.png untuk blog pengguna lain, situs Anda tidak akan mengirimkan cookie. Namun, saat pembaca mengikuti link ke cat.html di situs Anda, permintaan tersebut menyertakan cookie.

Sebaiknya gunakan SameSite dengan cara ini, tetapkan cookie yang memengaruhi tampilan situs ke Lax, dan cookie yang terkait dengan tindakan pengguna ke 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 tersemat, program afiliasi, iklan, atau login di beberapa situs, gunakan None untuk memastikan intent Anda jelas.

Tiga cookie berlabel Tidak ada, Longgar, atau Ketat bergantung pada konteksnya
Tandai konteks cookie secara eksplisit sebagai None, Lax, atau Strict.

Perubahan pada perilaku default tanpa SameSite

Dukungan Browser

  • Chrome: 80.
  • Edge: 86.
  • Firefox: di balik flag.
  • Safari: tidak didukung.

Atribut SameSite didukung secara luas, tetapi belum banyak digunakan. Sebelumnya, setelan cookie tanpa SameSite secara default mengirimnya dalam semua konteks, sehingga pengguna rentan terhadap CSRF dan kebocoran informasi yang tidak disengaja. Untuk mendorong developer menyatakan niat mereka dan memberikan pengalaman yang lebih aman kepada pengguna, proposal IETF, Incrementally Better Cookies menjelaskan dua perubahan utama:

  • Cookie tanpa atribut SameSite diperlakukan sebagai SameSite=Lax.
  • Cookie dengan SameSite=None juga harus menentukan Secure, yang berarti cookie tersebut memerlukan konteks yang aman.

Kedua perubahan ini kompatibel dengan versi sebelumnya browser yang telah menerapkan atribut SameSite dengan benar, serta browser yang tidak mendukung versi SameSite sebelumnya. Cookie ini dimaksudkan untuk mengurangi ketergantungan developer pada perilaku default browser dengan membuat perilaku cookie dan penggunaan yang dimaksudkan menjadi eksplisit. Setiap klien yang tidak mengenali SameSite=None harus mengabaikannya.

SameSite=Lax secara default

Jika Anda mengirim cookie tanpa menentukan atribut SameSite-nya, browser akan memperlakukan cookie tersebut seolah-olah ditetapkan ke SameSite=Lax. Sebaiknya tetap tetapkan 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 dapat 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 perbarui cookie yang ada ke Secure sesegera mungkin. Jika Anda mengandalkan layanan yang menyediakan konten pihak ketiga di situs Anda, pastikan penyedia layanan memperbarui cookie mereka, dan perbarui semua cuplikan atau dependensi di situs Anda untuk memastikan situs menggunakan perilaku baru.

Untuk mengetahui detail selengkapnya tentang cara mengupdate cookie agar berhasil menangani perubahan ini pada SameSite=None dan perbedaan 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 di Unsplash