Implementasi SameSite Cookie: Panduan Teknis & Keamanan

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 AtributDeskripsi PerilakuKasus Penggunaan
StrictCookie hanya dikirim jika permintaan berasal dari situs yang sama (origin yang sama).Aplikasi perbankan, dashboard admin sensitif.
LaxCookie dikirim pada navigasi top-level (link) dan metode aman (GET). Default modern browser.Keseimbangan antara keamanan dan kenyamanan user.
NoneCookie 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. SameSite membedakan antara example.com dan api.example.com jika 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.