Diciamo che vogliamo che i nuovi utenti confermino il loro indirizzo e-mail su un sito web sicuro (uno che non vogliamo che gli utenti facciano falsi account impersonando altri utenti). Per ragioni UX, possiamo volere:
- Corto come possibili codici nel caso in cui l'utente lo digiti
- codici alfanumerici per una facile digitazione
- Non richiede che l'utente inserisca nuovamente il suo indirizzo email al momento della conferma del codice
Un codice troppo corto è vulnerabile ai tentativi di forza bruta per confermarlo. Ad esempio il codice 1234 potrebbe essere facilmente indovinato. L'utente malintenzionato registra appena [email protected] e poi invia i codici di verifica fino al raggiungimento del target (e potrebbe verificare molte altre email casuali).
C'è una serie di strategie per combattere questo, tra cui:
- Utilizza un codice lungo che non può essere indovinato, forse costringendo l'utente a fare clic su un link di verifica anziché digitarlo manualmente
- Scade il codice in tempi relativamente brevi - concedendo meno tempo all'attaccante
- Forza l'utente a identificare chi dichiara di essere effettuando l'accesso o digitando la sua e-mail prima del codice di conferma. Quindi scade il codice dopo X tentativi. Ciò costringe l'attaccante a dover riavviare costantemente le proprie ipotesi - rimuovendo la possibilità di una ricerca esaustiva. Tuttavia è potenzialmente un papercut UX. Forse un utente fa clic sull'email di conferma su un telefono dopo aver effettuato l'accesso con il proprio desktop. Il telefono richiede l'accesso e costituisce una leggera barriera per registrarsi.
- Utilizza capcha, limitazione della velocità o altre strategie per scoraggiare l'automazione. Questo probabilmente non è garantito per risolvere il problema da solo.
Ogni strategia può potenzialmente danneggiare la UX. Qual è un ragionevole equilibrio di UX senza compromettere la sicurezza?