Oferă MFA și passkeys (WebAuthn) pentru conturile utilizatorilor

Subiect din roadmap-ul Bune practici: securitatea API-urilor · parte din „Autentificare”

Practica implică activarea autentificării cu doi factori (MFA) și a cheilor de acces moderne bazate pe standardul WebAuthn pentru toate conturile utilizatorilor. Aceste mecanisme reduc drastic riscul de compromis al conturilor prin furt de parole sau atacuri de tip brute-force, adăugând un strat suplimentar de securitate. Ignorarea lor expune aplicația la vulnerabilități critice, unde o singură parolă slabă sau reutilizată poate duce la acces neautorizat complet la datele sensibile ale sistemului.

Cum o aplici

  1. Implementează MFA clasic: Permite utilizatorilor să activeze MFA prin aplicații autentificatoare (TOTP) sau SMS, preferând TOTP pentru securitate mai bună.
  2. Integrează WebAuthn: Adaugă suport pentru biometrie sau chei hardware (YubiKey) folosind API-ul browser-ului navigator.credentials.
  3. Prioritizează WebAuthn: Oferă experiența cea mai fluidă pentru utilizatori, eliminând necesitatea memorării codurilor.
  4. Stochează securizat: Nu salva niciodată cheile private; stochează doar identifikatorii publici și datele necesare verificării pe server.

Exemplu

Varianta greșită folosește doar parola, lăsând contul vulnerabil la credential stuffing:

// GRESIT: Doar parolă
if (verifyPassword(inputPassword, storedHash)) {
  createSession(user);
}

Varianta corectă verifică mai întâi o cheie WebAuthn, apoi revine la parolă ca fallback:

// CORECT: WebAuthn + Fallback
const auth = await navigator.credentials.get({
  publicKey: challengeOptions
});

if (auth) {
  // Verificare semnătură criptografică pe server
  if (verifyWebAuthnSignature(auth, user.publicKey)) {
    createSession(user);
    return;
  }
}

// Fallback la parolă dacă WebAuthn eșuează
if (verifyPassword(inputPassword, storedHash)) {
  createSession(user);
}

Cum verifici

  • Teste automate: Scrie teste unitare care simulează autentificări fără MFA activat și verifică respingerea lor.
  • Audit de configurare: Verifică baza de date pentru a confirma că câmpurile de securitate (ex: mfa_enabled, webauthn_credential_id) sunt populate corect pentru utilizatorii activi.
  • Monitorizare: Urmărește metricile de login eșuat și detectează anomalii care indică încercări de bypass a MFA.

Greșeli frecvente

  1. SMS ca singur factor: SMS-ul este vulnerabil la interceptare (SIM swapping). Folosește întotdeauna aplicații autentificatoare sau WebAuthn când este posibil.
  2. Fallback nesigur: Dacă WebAuthn eșuează, nu reveni automat la parolă fără a valida strict identitatea utilizatorului prin alte metode sigure.
  3. Ignorarea backup codes: Nu oferi coduri de recuperare sigure pentru cazurile în care utilizatorul își pierde dispozitivul MFA, altfel riscă să fie blocat permanent sau să ceară suport tehnic excesiv.

Resurse gratuite

Alte subiecte din „Autentificare”