Dua mekanisme yang sering diabaikan padahal vektor serangan utama: lockout (anti-brute-force) dan recovery (user lupa password).
Account Lockout — mitigasi credential stuffing
Credential stuffing: penyerang mencoba ribuan kombinasi email/password dari data breach lain. Lockout membatasi percobaan.
Strategi lockout:
1. Counter sederhana (kurang disarankan):
// Setelah N kegagalan, lock N jam. Masalah: penyerang bisa lock akun orang lain.
2. Exponential backoff per IP + username:
percobaan 1 gagal → tunggu 1 detik
percobaan 2 gagal → tunggu 2 detik
percobaan 3 gagal → tunggu 4 detik
percobaan 4 gagal → tunggu 8 detik
Ini melambatkan brute force tanpa benar-benar mengunci akun.
3. CAPTCHA setelah kegagalan ke-3:
Human-solvable, bot-blocker. Kombinasikan dengan rate limiting per IP.
4. Sliding window lockout:
function recordFailedAttempt(userId) {
attempts[userId] = attempts[userId] || [];
attempts[userId].push(Date.now());
// Buang attempt lebih tua dari 15 menit
attempts[userId] = attempts[userId].filter(
t => Date.now() - t < 15 * 60 * 1000
);
}
function isLockedOut(userId) {
const recent = attempts[userId] || [];
return recent.length >= 5; // 5 kegagalan dalam 15 menit → locked
}
Account Recovery — "Saya lupa password"
Alur aman:
1. User klik "Lupa password", masukkan email
2. Server cek email TERDAFTAR
→ Jika tidak: tetap tampilkan "cek email Anda" (anti-enumeration)
→ Jika ya: generate reset token, kirim email
3. Token berlaku 1 jam, sekali pakai
4. User klik link, masukkan password baru
5. Setelah reset: invalidate SEMUA session aktif user (paksa login ulang di semua device)
Kesalahan umum:
- Recovery question ("Nama hewan pertama?") — gampang ditebak via media sosial
- Email unencrypted link — token mentah di URL yang bisa bocor via referer/logs
- Token yang sama dengan session token — scope-nya harus berbeda
- Memberitahu user bahwa email tidak terdaftar — enumeration attack
- Tidak invalidate session setelah reset — penyerang yang sudah login tetap login
SMS untuk recovery?
Hindari sebagai faktor utama — SIM swap attack adalah vektor nyata. Gunakan email + TOTP/authenticator app untuk akun high-value.