Digital Transformation
Webhook Signature
TL;DR: Webhook Signature adalah HMAC SHA-256 yang dikirim provider (Stripe, Midtrans, Xendit) di header request, sehingga endpoint Anda bisa memastikan webhook benar dari mereka. Tanpa verifikasi signature, endpoint webhook Anda terbuka untuk siapa saja yang menebak URL-nya.
Apa itu Webhook Signature?
Webhook adalah callback HTTP yang dikirim dari sistem A ke sistem B saat sebuah event terjadi. Karena URL webhook publik, siapa pun yang tahu URL-nya bisa mengirim request palsu. Signature memecahkan masalah ini: provider menandatangani payload dengan secret yang hanya diketahui mereka dan Anda, lalu mengirim hash di header. Server Anda menghitung ulang hash, jika cocok berarti payload sah.
Cara Verifikasi
| Tahap | Aksi |
|---|---|
| Ambil header | Baca X-Signature atau header serupa |
| Hitung HMAC | HMAC_SHA256(secret, raw_body) |
| Bandingkan | Pakai crypto.timingSafeEqual agar aman dari timing attack |
| Cek timestamp | Tolak request lebih lama dari 5 menit (anti replay) |
Selalu pakai raw body, bukan body yang sudah di-parse JSON, karena perubahan whitespace bisa membatalkan hash.
Kenapa Penting?
Tim marketing yang sudah pakai event-driven marketing automation atau menerima webhook pembayaran wajib memvalidasi signature. Tanpa verifikasi, attacker bisa kirim webhook palsu yang memicu email "pembayaran berhasil" ke pelanggan, atau membuat status pesanan tidak konsisten. Praktik idempotency dan signature verification adalah dua pondasi sistem webhook yang tahan kesalahan.
Pertanyaan Umum
Apakah HTTPS saja cukup?
Tidak. HTTPS mengenkripsi pengiriman, tapi tidak membuktikan pengirim sah. Signature membuktikan asal payload.
Bagaimana kalau signature mismatch?
Tolak request dengan HTTP 401 dan log untuk audit. Jangan eksekusi side effect apa pun sebelum signature valid.