Non memorizzare le password degli utenti, nemmeno in forma crittografata. È necessario memorizzare solo l'hash/digest necessario per l'autenticazione. Quindi, non è possibile "recuperare" la password (perché non la si conosce), è sufficiente ripristinarla e/o fornire all'utente una password temporanea temporanea che gli consenta di impostare una nuova password.
Aggiornamento: se si sta facendo quanto sopra, la procedura standard prevede un modulo "require-password-reset". L'utente inserisce il suo id (tipicamente la sua e-mail) e un "token" (ad esempio una stringa casuale) viene generato, memorizzato in alcune tabelle con qualche data di scadenza e inviato alla sua e-mail insieme a un link alla "password-reset" modulo. In questo modulo viene controllato il token, l'utente è autorizzato a immettere una nuova password e viene richiesto di tentare un nuovo accesso.
Aggiornamento 2: potrebbe sorgere un piccolo problema di privacy: cosa dovremmo fare se l'ID utente (email, nome utente o altro) inserito nel modulo di richiesta non esiste nel nostro database? Per emettere un messaggio "L'utente non esiste Controllare l'id e riprovare." potrebbe essere ok, ma in alcuni casi potrebbe causare un problema di privacy: chiunque può controllare se qualcuno è registrato nel tuo database! Se si desidera evitare ciò, è necessario fornire lo stesso messaggio ("una mail è stata inviata con le istruzioni ...") anche se l'utente non è stato trovato (e quindi non è stata effettivamente inviata una mail). Problemi di privacy simili consigliano di inviare solo il messaggio "login errato: utente errato o password" quando l'utente tenta di accedere senza successo - non rivelare se si tratta di un utente o una password errati.
Se utilizzi una password generata casualmente, assicurati di regolare la complessità in modo che corrisponda all'abilità dei tuoi utenti. Ad esempio, non utilizzare molti non-alfanumerici se non gli alleati i tuoi utenti sono esperti di computer. Assicurati anche di tagliare gli spazi vuoti dalle password immesse, dato che probabilmente verranno tagliate e cancellate dalle e-mail, che spesso prelevano spazi bianchi extra. –
Alcune restrizioni e sostituzioni di caratteri sono buone idee: rimuovi '{0,1,2,3,5, l}' dall'elenco dei caratteri, metti giù tutto e applica una mappa come '[0,1,2, 3,5, l] -> [o, i, z, b, s, i] 'alla password che si ottiene dall'utente. "3" è lì perché "B" viene spesso scambiato per "3" quando non c'è un contesto familiare, gli altri dovrebbero essere chiari. –