Cookie SameSite dijelaskan

Dukungan Browser

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

Sumber

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.

Tiga cookie berlabel Tidak Ada, Lax, 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 bendera.
  • Safari: tidak didukung.

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 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 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.

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