Arsitektur OTP yang disarankan
Pisahkan proses menjadi langkah berikut:
- User memasukkan nomor WhatsApp.
- Server membuat kode acak dengan generator kriptografis.
- Server menyimpan hash OTP, tujuan, purpose, expiry, dan jumlah percobaan.
- Server mengirim pesan melalui REST API Kirimore.
- User memasukkan OTP.
- Server membandingkan hash, expiry, purpose, dan rate limit sebelum menandai nomor terverifikasi.
Contoh membuat OTP di PHP
Jangan menggunakan angka tetap atau rand() biasa untuk kode keamanan.
<?php
$otp = (string) random_int(100000, 999999);
$otpHash = hash('sha256', $otp);
$expiresAt = (new DateTimeImmutable('+5 minutes'))->format('Y-m-d H:i:s');
// Simpan $otpHash, nomor, purpose, expiry, attempt_count ke database.
// Kirim $otp melalui REST API dari backend, bukan dari browser.Kirim kode menggunakan endpoint pesan teks
Pesan OTP dapat dikirim sebagai text biasa melalui REST API Kirimore.
<?php
$payload = [
'api_key' => getenv('KIRIMORE_API_KEY'),
'sender' => getenv('KIRIMORE_SENDER'),
'number' => $phone,
'message' => "Kode OTP Anda: {$otp}. Berlaku 5 menit. Jangan berikan kode ini kepada siapa pun."
];
// POST JSON ke https://kirimore.com/apiv2/send-message.phpRate limit wajib
Batasi minimal:
- Jumlah permintaan OTP per nomor dalam periode tertentu.
- Jumlah permintaan per IP/device.
- Jumlah percobaan kode salah.
- Waktu minimum sebelum tombol kirim ulang aktif.
- Jumlah OTP aktif untuk satu purpose.
Jangan simpan OTP plaintext lebih lama dari yang dibutuhkan
Untuk sistem yang lebih aman, simpan hash OTP dan bandingkan hash ketika user memasukkan kode. Hapus atau invalidasi record setelah sukses. Jangan menulis OTP ke application log produksi karena log sering memiliki retensi lebih panjang daripada masa berlaku kode.
Praktikkan dengan Kirimore
Hubungkan device, gunakan fitur yang sesuai workflow Anda, dan uji integrasi dari lingkungan internal sebelum digunakan ke pelanggan.
Gunakan REST API Kirimore untuk notifikasi