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:

plaintext
HMAC(message, secretKey) → token unik

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:

php
$token = hash_hmac('sha256', session_id(), $secret_key);
  • 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:

php
if (hash_equals($expected_token, $user_token)) {
// aman
}

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