In un sito Web che eseguo, ho implementato questa procedura per il recupero dell'account (procedura password dimenticata). Vorrei sapere se ci sono problemi che non ho individuato, che lo rendono insicuro.
Quando l'utente crea un account, gli viene richiesto di inserire una password (ovviamente) e un indirizzo email. Sono inoltre tenuti a selezionare una "domanda segreta" da un elenco di circa 20 domande e inserire una "risposta segreta" a tale domanda. La password e la risposta segreta domanda sono ciascuna hash, ognuna con un diverso salt casuale. Supponiamo che la funzione di hashing utilizzata sia adeguata. (L'utente può cambiare la sua email, password e / o domanda / risposta segreta in qualsiasi momento, deve inserire la password per farlo. Non impongo alcun requisito di forza della password, eccetto per un requisito di lunghezza minima.)
Se l'utente deve recuperare l'account, accede alla pagina di recupero dell'account e inserisce il suo nome utente. Un'e-mail viene inviata all'indirizzo e-mail associato al proprio account. Questa email contiene un link che contiene un codice generato a caso (site.com/accountrecovery?user=1234&code=bryvthery6y65htee o simili). Quando l'utente fa clic sul link, viene reindirizzato al sito e, presumendo che il codice verifichi, viene indirizzato a una pagina in cui viene posta la domanda segreta e deve rispondere e allo stesso tempo immettere una nuova password.
Ogni volta che la password memorizzata o la risposta segreta vengono cambiate, con qualunque metodo, viene generato un nuovo salt random per esso.
Ci sono problemi con questa configurazione che ti vengono in mente? Mi piacerebbe una critica costruttiva. Il pensiero è che per poter reimpostare la password, l'utente deve avere accesso all'indirizzo email registrato e conoscere la risposta segreta.