Alcuni suggerimenti:
Non reimpostare la password dell'utente fino alla conferma. Non reimpostare immediatamente la password dell'utente. Ripristinalo solo quando l'utente fa clic su un link di conferma inviato al suo indirizzo email pre-registrato.
Richiedi un CAPTCHA. Quando un utente richiede che la sua password sia ripristinata, costringila a risolvere un CAPTCHA prima di procedere oltre. Questo per impedire che strumenti automatizzati provochino dolore a molti utenti e costringano l'utente a dimostrare di essere un essere umano (non un robot).
Casualità. L'URL di reimpostazione della password a tempo limitato dovrebbe includere un componente casuale non accessibile. Assicurati di utilizzare la casualità di cripto-qualità. L'output da /dev/urandom
o System.Security.Cryptography.RNGCryptoServiceProvider
sarebbe una buona scelta. L'output da rand()
o random()
o System.Random
non è abbastanza casuale e sarebbe una scelta sbagliata. Un GUID o timestamp non è casuale abbastanza e non sarebbe una buona scelta.
Includi un limite di tempo. Il link di conferma del ripristino dovrebbe scadere dopo un tempo ragionevole: ad esempio, 24 ore. Il link dovrebbe essere utilizzabile solo una volta e dovrebbe scadere immediatamente non appena viene utilizzato.
Includi il testo esplicativo nell'email. Potresti voler aggiungere del testo esplicativo all'e-mail, per spiegare perché l'email è stata inviata, nel caso qualcuno richieda un reset per un account che non è il tuo proprio. Potresti includere del testo come "Qualcuno ha richiesto che la password venga ripristinata per il tuo account username
su site
. Se hai fatto questa richiesta, clicca qui per cambiare la tua password. Se non hai fatto questa richiesta, clicca qui per annullare la richiesta. "
Invia email dopo aver reimpostato la password. Una volta ripristinata la password, invia un'email all'utente per far sapere che la password è stata modificata. Non includere la nuova password in quell'email.
Annullamenti del monitoraggio. Potresti prendere in considerazione l'inclusione di una logica per monitorare la frequenza con cui gli utenti fanno clic sul link di cancellazione indicando che non hanno richiesto il ripristino. Se questo supera una certa soglia, potrebbe essere utile inviare un avviso agli operatori di sistema. Inoltre, se un link di cancellazione per qualche richiesta viene visitato dopo viene visualizzato il link di conferma, si tratta di una potenziale indicazione di un attacco contro quell'utente: potresti voler agire in quel momento, ad esempio invalidare la password dell'utente e chiedergli di reimpostare nuovamente la password. (Questa è una difesa contro il seguente attacco: l'attaccante ottiene l'accesso alla cassetta postale dell'utente, quindi richiede che la propria password sul sito venga ripristinata, quindi visita il link di conferma.) Se l'utente malintenzionato non cancella queste e-mail dalla posta in arrivo dell'utente, quindi, quando l'utente reale legge la sua email, può fare clic sul link di cancellazione, fornendo un'indicazione di possibili problemi.)
Utilizza HTTPS. Il link dovrebbe utilizzare https (non http :), per proteggere da vari attacchi (ad es. attacchi di Firesheep agli utenti che navigano sul Web da un Internet cafe).
Registra queste operazioni. Suggerisco di registrare tutte queste richieste. Oltre a registrare il nome utente dell'utente, è possibile che si desideri registrare l'indirizzo IP del client che ha richiesto l'invio di un link di reset all'utente, nonché l'indirizzo IP del client che ha visitato il link di ripristino.
Letture aggiuntive. Puoi anche leggere l'eccellente post sul blog di Troy Hunt, Tutto ciò che avresti sempre voluto sapere sulla creazione di una funzione di reimpostazione della password sicura . Grazie a @coryT per un link a questa risorsa.
Infine, considera l'autenticazione non-password. Le password hanno molti problemi come meccanismo di autenticazione e potresti prendere in considerazione altri metodi di autenticazione degli utenti, come la memorizzazione di un cookie persistente sicuro sulla loro macchina con un non accessibile segreto per autenticarli In questo modo, non vi è alcuna password da dimenticare e nessun modo per l'utente di essere phishing, anche se è necessario fornire un modo per un utente di autorizzare l'accesso da una nuova macchina o un nuovo browser (possibilmente via e-mail al indirizzo email registrato). Questo documento di indagine ha un'indagine eccellente su molti metodi di autenticazione di riserva e sui loro pregi e difetti.