Account Recovery & Lockout — Auth

Dua mekanisme yang sering diabaikan padahal vektor serangan utama: lockout (anti-brute-force) dan recovery (user lupa password). Account Lockout — mitigasi cred

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:

SMS untuk recovery?

Hindari sebagai faktor utama — SIM swap attack adalah vektor nyata. Gunakan email + TOTP/authenticator app untuk akun high-value.