Avere un valore booleano configurabile dall'utente per "reset consentito".
Se hai i loro e-mail / alcuni mezzi fuori banda per comunicare con l'utente finale
Quando l'utente fa clic sul collegamento "Ho dimenticato la password", se "reset consentito" è true, invia un link per la reimpostazione della password all'account e-mail associato all'account utente. Assicurati di utilizzare un servizio di posta elettronica che esegua prima la crittografia end-to-end (in modo che, se il loro server di posta lo supporta, il link non venga mai inviato in chiaro e se il loro server non lo supporta, non lo sono t negato il link).
Limita il numero di volte in cui l'e-mail può essere inviata allo stesso account (ad esempio 2 ripristini al giorno), quindi qualcuno non può utilizzarlo per inviare spam all'account. Non far sapere all'utente se è stata inviata un'e-mail o se l'account da loro menzionato esiste addirittura.
Se non fanno clic sul link per la reimpostazione della password, non dovrebbe cambiare nulla. Se fanno clic su di esso dopo un determinato periodo di timeout o se tra l'invio dell'e-mail e il momento in cui viene fatto clic su "reset consentito" è stato impostato su falso, non dovrebbe accadere nulla.
Se non disponi di mezzi di comunicazione fuori banda
Se è impostato "reset consentito", utilizzare un meccanismo di risposta alle sfide, ad esempio domande di sicurezza configurabili dall'utente. Se rispondono correttamente alle domande, consenti loro di inserire una nuova password. Potresti anche prendere in considerazione l'hashing delle risposte.
Potresti, ovviamente, usare anche qualcosa come TOTP , ma è probabile che lo facciano se non lo fanno t avere la password, anche loro non avranno la chiave necessaria per questo.
In entrambi i casi
Conduci l'intero scambio su un canale crittografato. A meno che tu stia cercando di impedire alla NSA di rubare le credenziali, SSL dovrebbe essere sufficiente.