Memahami Cookie dan Keamanannya
Cookie adalah potongan kecil data yang disimpan di browser dan dikirim kembali ke server di setiap request. Cookie digunakan untuk session management, personalisasi, dan tracking. Tanpa konfigurasi yang benar, cookie bisa menjadi celah keamanan.
Atribut Keamanan Cookie
1. HttpOnly
Mencegah JavaScript mengakses cookie. Ini melindungi dari serangan XSS yang mencoba mencuri cookie.
// Tanpa HttpOnly — rentan XSS
Set-Cookie: sessionId=abc123
// Dengan HttpOnly — aman dari JavaScript
Set-Cookie: sessionId=abc123; HttpOnly
// JavaScript tidak bisa membaca cookie HttpOnly
document.cookie; // sessionId tidak akan muncul di sini
2. Secure
Cookie hanya dikirim melalui koneksi HTTPS. Mencegah cookie dicuri melalui network sniffing.
Set-Cookie: sessionId=abc123; HttpOnly; Secure
3. SameSite
Mengontrol kapan cookie dikirim dalam cross-site request. Ini adalah proteksi utama terhadap CSRF:
- Strict — Cookie tidak dikirim sama sekali dalam cross-site request
- Lax — Cookie dikirim hanya untuk navigasi top-level GET (default di browser modern)
- None — Cookie selalu dikirim (harus disertai Secure)
Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict
Cookie Prefix
Browser modern mendukung cookie prefix untuk keamanan tambahan:
// __Secure- prefix: cookie harus memiliki flag Secure
Set-Cookie: __Secure-sessionId=abc123; Secure; HttpOnly
// __Host- prefix: harus Secure, tanpa Domain, Path harus /
Set-Cookie: __Host-sessionId=abc123; Secure; HttpOnly; Path=/
Konfigurasi Cookie di Laravel
// config/session.php
return [
"cookie" => env("SESSION_COOKIE", "app_session"),
"secure" => env("SESSION_SECURE_COOKIE", true),
"http_only" => true,
"same_site" => "lax",
];
Checklist Cookie Security
- Selalu set HttpOnly untuk cookie sensitif
- Gunakan Secure flag di production
- Pilih SameSite yang tepat (Strict atau Lax)
- Set expiration yang wajar
- Jangan simpan data sensitif langsung di cookie — gunakan session ID saja
- Pertimbangkan cookie prefix untuk keamanan tambahan