19 lines
1.9 KiB
Markdown
19 lines
1.9 KiB
Markdown
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. |