Reset della password

Per vari motivi ho cercato in giro alcune linee guida su come scrivere una buona procedura di reset della password di un account via posta elettronica, ne riassumo qui alcune, in ordine sparso.

Non modificare i dati fino alla conferma dell’utente. A meno di necessità specifiche o casi particolari, i dati di autenticazione non devono essere modificati fino all’avvenuta conferma da parte dell’utente, al fine di impedire che buontemponi blocchino l’accesso all’utente semplicemente chiedendo un reset della password.

Usare CAPTCHA. La pagina di richiesta del reset della password dovrebbe contenere un CAPTCHA per evitare che i sistemi automatici possano attaccare facilmente il sistema oppure possano provocare disagi a più utenti.

Utilizzare una buona fonte di entropia. L’URL per il reset della password inviato via mail deve contenere una parte casuale, che non deve essere legata al timestamp o ad altri valori deterministici. È bene utilizzare sempre il generatore di numeri casuali disponibile sul sistema (/dev/urandom per *NIX) anziché una funzione di libreria del linguaggio.

Limite di tempo. L’URL utilizzabile per il reset della password deve avere una scadenza oltre la quale non è più valido.

Spiegare bene. Sia la pagina di reset della password sia le mail che vengono inviare all’utente devono essere ben chiare e spiegare bene la modalità di reset. In particolare, la mail deve indicare in maniera precisa il nome del sito di cui si sta reimpostando la password, il termine ultimo di validità e le azioni da intraprendere se chi riceve la mail non ha chiesto il reset della password.

Confermare. Una volta terminata (o cancellata) l’operazione, è bene inviare una seconda mail di conferma all’utente.

Monitorare. Una funziona amministrativa dovrebbe segnalare gli account di cui viene richiesta spesso la reimpostazione della password. Inoltre è bene impedire un numero non-umano di richieste di reset della password nell’unità di tempo, come, ad esempio, 500 richieste all’ora.

HTTPS. Se possibile, utilizzare HTTPS con un certificato valido per il form di richiesta di reset e per l’URL di sblocco.

Cookie. Non devono essere utilizzati i cookie per identificare l’utente ed eventuali cookie di sessione o di identificazione devono essere cancellati nel momento in cui la password viene reimpostata.

Riservatezza. Se nel form di richiesta password si richiede direttamente la mail (da evitare, se possibile), quando viene inserita una mail sconosciuta, il programma deve comportarsi allo stesso modo in cui si comporterebbe se la mail fosse di un utente registrato, al fine di impedire ad un eventuale curioso o attaccante di capire se una mail corrisponde ad utente effettivamente registrato.

Va da sé che queste sono linee guida che si applicano a siti normali, per ambienti che richiedono una sicurezza maggiore devono essere messe in campo procedure completamente diverse.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

6 pensieri riguardo “Reset della password”

  1. beh, se accetti l’email senza colpo ferire rischi di dare conferma anche ad una digitazione errata dell’indirizzo email… dipende dal livello medio degli utenti registrati.

    1. Potrebbe essere (in Italia) una questione di dati personali o sensibili. Pensa a qualcosa legato ad un partito politico (che rientra nei dati sensibili). Se io so la tua mail e se il sistemi di reset mi dice se la mail e’ registrata o no, io posso sapere se tu hai un account in quel servizio di quel partito politico.

      Per gli errori, basta scriverlo chiaramente, invitando l’utente a controllare la mail, la casella dello spam e a riprovare se non riceve nulla dopo 10 minuti,

    1. Perche’ ci sono metodi di furto di identita’ che si basano sul furto dei cookies trasmessi in chiaro su reti sniffabili (wifi). Googla ‘Firesheep’.

  2. Ah, giusto. Non ci avevo pensato. Ma un reset di una password dovrebbe sempre essere in https, risolvendo cosi` il problema dei cookies sniffati, no?

Spazio per un commento