Definisi dan Fungsi SameSite Cookie
Atribut SameSite pada HTTP cookie adalah mekanisme keamanan yang menginstruksikan browser untuk menentukan apakah cookie dikirim bersama permintaan lintas situs (cross-site requests). Implementasi ini krusial untuk memitigasi serangan Cross-Site Request Forgery (CSRF) dengan membatasi cakupan pengiriman cookie hanya pada konteks yang diizinkan.
Tabel Konfigurasi Atribut SameSite
| Nilai Atribut | Deskripsi Perilaku | Kasus Penggunaan |
|---|---|---|
Strict | Cookie hanya dikirim jika permintaan berasal dari situs yang sama (origin yang sama). | Aplikasi perbankan, dashboard admin sensitif. |
Lax | Cookie dikirim pada navigasi top-level (link) dan metode aman (GET). Default modern browser. | Keseimbangan antara keamanan dan kenyamanan user. |
None | Cookie dikirim pada semua permintaan lintas situs. Wajib menggunakan Secure. | Integrasi pihak ketiga (widget, tracking). |
Langkah Implementasi Teknis
Untuk mengimplementasikan SameSite, Anda harus menyertakan atribut tersebut pada header Set-Cookie di sisi server. Berikut adalah contoh implementasi pada berbagai lingkungan:
1. Implementasi via Header HTTP (Node.js/Express)
res.cookie('session_id', 'xyz123', {
sameSite: 'lax',
secure: true,
httpOnly: true
});2. Implementasi via Nginx
proxy_cookie_path / "/; SameSite=Lax; Secure";3. Implementasi via PHP
setcookie('session_id', 'xyz123', [
'samesite' => 'Lax',
'secure' => true,
'httponly' => true
]);Penting: Aturan Secure Flag
Jika Anda menetapkan SameSite=None, browser modern (Chrome 80+, Firefox, Edge) mewajibkan atribut Secure untuk diaktifkan. Tanpa Secure, browser akan menolak cookie tersebut. Pastikan situs Anda telah menggunakan protokol HTTPS sebelum menerapkan konfigurasi ini.
Troubleshooting Lapangan
- Cookie tidak terbaca: Pastikan domain dan sub-domain sesuai.
SameSitemembedakan antaraexample.comdanapi.example.comjika tidak dikonfigurasi dengan benar. - Masalah Iframe: Jika aplikasi Anda dimuat dalam iframe di situs lain, gunakan
SameSite=None; Secure. - Browser Lama: Beberapa browser versi lama tidak mendukung atribut ini. Gunakan fallback atau deteksi user-agent jika diperlukan, namun prioritaskan standar keamanan modern.