Banyak developer menggunakan token CSRF untuk melindungi aplikasi web dari serangan berbahaya. Tapi… pertanyaannya:
Apakah cukup menggunakan HMAC (Hash-based Message Authentication Code) untuk membuat token yang benar-benar kuat?
Artikel ini akan membahas apa itu HMAC, bagaimana digunakan untuk token CSRF, dan apakah benar-benar cukup kuat untuk melawan serangan. Kita bahas dengan bahasa yang sederhana, yuk!
🧠 Apa Itu HMAC?
HMAC adalah metode untuk membuat tanda tangan digital (hash) dari sebuah pesan, dengan menggabungkan pesan dan kunci rahasia.
Contoh:
Jika ada yang mengubah isi pesan atau tidak tahu kuncinya, maka hasil HMAC-nya akan berbeda.
Inilah alasan kenapa HMAC sering dipakai untuk keamanan — termasuk membuat CSRF token.
🎯 Tujuan CSRF Token
CSRF token bertugas untuk:
-
Memastikan bahwa permintaan benar-benar dari pengguna asli
-
Mencegah situs jahat mengirim permintaan palsu dengan menyamar sebagai pengguna
🔧 Cara Menggunakan HMAC untuk CSRF Token
Misalnya kamu membuat token CSRF seperti ini:
-
session_id()
adalah identitas sesi pengguna -
$secret_key
adalah kunci rahasia server
Saat permintaan datang, server tinggal menghitung ulang token dan membandingkan hasilnya.
Kalau cocok → permintaan valid.
✅ Keunggulan HMAC Token
Keunggulan | Penjelasan |
---|---|
🔐 Aman dari tebakan | Karena token dibuat dari secret key |
🧮 Mudah diverifikasi | Server tinggal hitung ulang token |
🚫 Tidak bisa dimanipulasi | Kalau diubah sedikit, hasil hash-nya berubah total |
❌ Tidak perlu simpan token | Bisa digenerate ulang dari data sesi |
⚠️ Tapi… Apakah Ini Saja Sudah Cukup?
Jawaban singkat: Cukup, kalau digunakan dengan benar
Tapi ada beberapa hal penting yang harus diperhatikan:
❗ Hal yang Perlu Diwaspadai
1. Token Harus Unik Per Sesi
Jangan buat token yang bisa digunakan oleh banyak user. Harus benar-benar terkait dengan sesi pengguna.
2. Token Harus Tersembunyi
Token harus dikirim lewat form (hidden input) atau header request — bukan lewat URL, karena bisa dicuri dari log.
3. Validasi HMAC-nya Harus Ketat
Gunakan fungsi seperti hash_equals()
untuk mencegah serangan timing attack:
4. Hindari Token yang Tidak Kedaluwarsa
Idealnya, token punya batas waktu. Misalnya hanya aktif selama sesi pengguna hidup, atau selama 30 menit.
🔐 Perbandingan: HMAC vs. Random Token
Fitur | HMAC Token | Random Token |
---|---|---|
Perlu disimpan? | Tidak | Ya (di session/server) |
Bisa dicek ulang? | Ya (pakai rumus HMAC) | Ya, tapi harus dicocokkan manual |
Lebih aman? | Sama-sama aman (kalau diterapkan dengan benar) | |
Mudah dikelola? | HMAC lebih ringan karena tidak simpan data |
🧾 Kesimpulan
HMAC adalah metode yang kuat dan efisien untuk membuat token CSRF,
asalkan:
-
Token benar-benar unik per pengguna
-
Dikirim secara aman (tidak lewat URL)
-
Divalidasi dengan benar di server
-
Tidak disalahgunakan (misal, dibagikan ke public)
Jadi, apakah HMAC cukup kuat untuk lawan CSRF?
✅ YA, asal digunakan dengan cara yang benar.
Penulias : Muhammad Aditya Alkhawarizmi
Nim : 23156201023
jurusan : Sistem Komputer