Atribut cookie

Saat server web merespons permintaan untuk resource, server dapat menyertakan header Set-Cookie beserta responsnya. Header tersebut memberi tahu browser Anda untuk menyimpan cookie. Contoh: Set-Cookie:cat=tabby. Apa itu cookie? menjelaskan cara kerja cookie.

Selain memberikan nama dan nilai cookie, Set-Cookie dapat menyertakan atribut untuk mengontrol apakah cookie ditetapkan, dan kapan masa berlakunya berakhir. Atribut cookie dipisahkan dengan titik koma. Contoh:

    Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;

Artikel ini menjelaskan atribut cookie yang paling penting:

Menggunakan cookie HTTP menjelaskan atribut cookie secara lebih mendetail.

Aman

👉 Anda harus menyertakan Secure secara default untuk semua cookie.

Jika header Set-Cookie menyertakan Secure, cookie hanya akan disertakan dengan permintaan terenkripsi yang menggunakan protokol HTTPS: cookie tidak akan disertakan dalam permintaan HTTP. Hal ini dapat membantu menghentikan serangan perantara, saat penyerang secara diam-diam melakukan intervensi dalam komunikasi antara browser dan server untuk meneruskan informasi, dan berpotensi mengubahnya.

HTTPOnly

👉 Anda harus menyertakan HTTPOnly secara default untuk semua cookie. Hanya abaikan jika Anda memerlukan akses JavaScript.

Jika header Set-Cookie menyertakan HTTPOnly, cookie tidak dapat diakses menggunakan document.cookie. Hal ini membantu melindungi dari jenis serangan tertentu yang menargetkan cookie.

SameSite

👉 SameSite=Lax adalah default jika tidak ada nilai yang ditetapkan. SameSite=None mengizinkan cookie lintas situs, tetapi berarti cookie akan diblokir jika ada pembatasan cookie pihak ketiga.

Permintaan resource dari situs yang berbeda dengan situs yang Anda kunjungi adalah permintaan lintas situs. Cookie yang ditetapkan sebagai respons terhadap permintaan lintas situs dikenal sebagai cookie pihak ketiga. Cari tahu selengkapnya: Apa yang dimaksud dengan cookie pihak ketiga?

Atribut SameSite mengontrol apakah cookie pihak ketiga akan disertakan dalam permintaan. Nilai ini memiliki tiga kemungkinan nilai: Strict, Lax, atau None.

Ketat

Cookie hanya akan dikirim sebagai respons terhadap permintaan dari halaman yang ada di situs asal cookie. Misalnya: bayangkan pengguna mengunjungi cats.example dan memiliki cookie yang ditetapkan dengan atribut SameSite=Strict. Kemudian, pengguna berada di situs lain, dan mereka mengikuti link ke halaman di cats.example. Cookie yang ditetapkan tidak akan disertakan dalam permintaan tersebut.

Lax

Cara kerjanya sama seperti Strict, kecuali browser juga akan menyertakan cookie saat pengguna mengikuti link ke situs asal cookie. (Dalam contoh Strict sebelumnya, cookie akan disertakan saat pengguna mengikuti link ke cats.example.) Lax adalah default, jika tidak ada atribut SameSite yang disertakan dalam header Set-Cookie.

Tidak ada

Tidak ada batasan: cookie akan disertakan dengan permintaan, baik cookie tersebut lintas situs maupun tidak. Dengan SameSite=None, cookie juga harus memiliki atribut Secure.

Cari tahu selengkapnya: Cookie SameSite dijelaskan.

Dipartisi

👉 Anda harus menyertakan atribut Partitioned secara default jika membuat cookie pihak ketiga, kecuali jika Anda tahu secara eksplisit bahwa cookie tersebut perlu dibagikan di beberapa penyematan.

Atribut ini memungkinkan Anda mengaktifkan cookie ke penyimpanan yang dipartisi, dengan "toples cookie" terpisah per situs tingkat atas. Cookie memiliki kunci ganda, oleh situs level teratas serta domain yang menetapkannya.

Misalnya: bayangkan situs A dan situs B menyertakan iframe dari situs C. Cookie yang dipartisi yang ditetapkan oleh iframe di situs A tidak dapat diakses oleh iframe di situs B: cookie AC terpisah dari cookie BC.

Diagram yang menunjukkan bahwa dua situs web yang berbeda yang menyematkan pihak ketiga yang sama
  tidak akan lagi membagikan cookie untuk pihak ketiga tersebut.
Dengan partisi cookie, layanan pihak ketiga yang menetapkan cookie saat disematkan di satu situs level teratas tidak dapat mengakses cookie yang sama saat layanan disematkan di situs level teratas lainnya.

Cookie dengan atribut Partitioned dikenal sebagai CHIPS: Cookies Having Independent Partitioned State.

Cookie yang dipartisi harus memiliki atribut Secure.

Cari tahu lebih lanjut: Cookie yang Memiliki Status Partisi Independen.

Expires dan Max-Age

👉 Hapus atribut Max-Age dan Expires kecuali jika Anda memerlukan cookie untuk berlangsung lebih lama dari sesi saat ini. Browser akan menghapus cookie yang sudah tidak berlaku, jadi tidak ada gunanya menetapkan masa berlaku yang masih beberapa tahun lagi. Sebagai gantinya, Anda harus mempertimbangkan untuk memuat ulang cookie saat pengguna mengunjungi kembali situs Anda.

Anda dapat menentukan tanggal dan waktu Expires, atau Max-Age dalam detik, setelah cookie dihapus dan tidak lagi dikirim. Contoh:

  • Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
  • Set-Cookie:cat=tabby; Max-Age=86400

Jika Anda tidak menentukan atribut Max-Age atau Expires, cookie akan dihapus saat sesi saat ini berakhir. Jenis cookie ini terkadang dikenal sebagai cookie sesi.

Domain

👉 Kecuali jika Anda memerlukan cookie untuk disertakan dengan permintaan ke subdomain, jangan sertakan atribut Domain.

Jika header Set-Cookie memiliki atribut Domain, cookie akan disertakan dengan permintaan ke domain yang ditentukan, dan subdomainnya.

Jika header Set-Cookie tidak memiliki atribut Domain, cookie tidak akan disertakan dengan permintaan ke subdomain.

Dengan kata lain, menyertakan atribut Domain mengurangi pembatasan domain.

Misalnya, dengan respons dari situs cats.example:

  • Set-Cookie:cat=tabby
    Cookie hanya akan disertakan dengan permintaan ke cats.example
  • Set-Cookie:cat=tabby; Domain=cats.example
    Cookie akan disertakan dengan permintaan ke cats.example, dan juga permintaan untuk resource di subdomain seperti fluffy.cats.example atau user.assets.cats.example

Jalur

👉 Sertakan Path=/ dengan cookie jika Anda memerlukan semua permintaan ke jalur apa pun di situs Anda untuk menyertakan cookie. Jangan mengandalkan Path untuk perlindungan keamanan.

Jika atribut Path disertakan dalam header respons Set-Cookie, cookie yang ditetapkan hanya akan disertakan dalam permintaan ke URL (di situs yang menetapkan cookie!) yang cocok dengan nilai Path.

Contoh:

  • Set-Cookie:cat=tabby; Path=/articles
    Cookie akan disertakan untuk permintaan ke jalur URL apa pun yang diawali dengan /articles:
    https://cats.example/articles/tabby/index.html
    https://cats.example/articles/breeds/tabby/index.html
    https://cats.example/images/tabby.jpg
    https://cats.example/en/articles/tabby/index.html
  • Set-Cookie:cat=tabby; Path=/
    Semua permintaan ke URL apa pun di situs akan menyertakan cookie.

Jika header respons Set-Cookie tidak memiliki nilai Path, cookie hanya akan disertakan dengan permintaan ke direktori yang sama. Misalnya, bayangkan bahwa cookie cat=tabby ditetapkan sebagai respons terhadap permintaan untuk cats.example/images/tabby.jpg. Jika tidak ada Path yang ditetapkan, cookie hanya akan disertakan dengan permintaan untuk file dalam direktori cats.example/images.

Demo

Alat

Cari tahu selengkapnya