Add otp.md

This commit is contained in:
andri 2026-09-16 15:43:00 +00:00
parent 81d2a16dcb
commit 775cb380cf
1 changed files with 19 additions and 0 deletions

19
otp.md Normal file
View File

@ -0,0 +1,19 @@
Tolong audit dan amankan alur login WhatsApp OTP serta integrasikan Cloudflare Turnstile pada proyek Node.js, SQLite, dan Tailwind CSS ini. Lakukan langkah-langkah berikut:
1. Konfigurasi Environment Variables (.env):
- Gunakan variabel .env untuk menyimpan WA_API_KEY, WA_GATEWAY_URL, CF_TURNSTILE_SITE_KEY, dan CF_TURNSTILE_SECRET_KEY.
- Pastikan tidak ada API Key atau rahasia yang tertulis langsung (hardcoded) di kode backend maupun frontend.
2. Pengamanan Backend (Express / Node.js & SQLite):
- Kunci Template Pesan: Hapus/abaikan parameter teks pesan dari frontend. Backend harus membuat kode OTP 6-digit secara acak dan mengunci format teks pesan WhatsApp di backend.
- Verifikasi Cloudflare Turnstile Server-Side: Pada endpoint kirim OTP (misal /api/send-otp), terima token cf-turnstile-response dari frontend. Verifikasi token ini ke API Cloudflare (https://challenges.cloudflare.com/turnstile/v0/siteverify) menggunakan CF_TURNSTILE_SECRET_KEY. Jika verifikasi gagal/kadaluwarsa, kembalikan response error HTTP 403.
- Pasang Rate Limiter: Batasi request kirim OTP (misalnya maksimal 3 kali per 10 menit per IP / nomor telepon) menggunakan middleware seperti express-rate-limit.
- SQLite Prepared Statements: Pastikan query simpan/update OTP ke database SQLite menggunakan parameterized query / prepared statement untuk mencegah SQL Injection.
3. Pembaruan Frontend (HTML & Tailwind CSS):
- Tambahkan skrip Cloudflare Turnstile (https://challenges.cloudflare.com/turnstile/v0/api.js) pada halaman login.
- Sisipkan div widget Turnstile <div class="cf-turnstile" data-sitekey="..."> di dalam form login OTP.
- Saat form disubmit, ambil token Turnstile (cf-turnstile-response) dan sertakan bersama nomor WhatsApp ke payload request backend.
- Jika kirim OTP gagal atau terjadi error, tambahkan fungsi untuk me-reset widget Turnstile (turnstile.reset()).
Tolong periksa seluruh berkas terkait dan jalankan refactoring ini secara menyeluruh.