Utilizza HTTPS solo per questo, e poi entreremo nei dettagli dell'implementazione.
Prima di tutto vorrai proteggere contro enumerazione utente .
Cioè, non rivelare nella pagina se l'utente esiste o no. Questo dovrebbe essere divulgato solo nell'e-mail stessa.
In secondo luogo vorrai evitare perdita di referrer . Assicurati che non siano presenti collegamenti esterni o risorse esterne sul tuo link di destinazione. Un modo per attenuarlo consiste nel reindirizzare dopo aver seguito il collegamento iniziale in modo che il token non sia più nella stringa di query. Tieni presente che se qualcosa va storto (ad esempio il tuo database è brevemente inattivo) e viene visualizzato un modello di errore standard, questo potrebbe causare la perdita del token nel caso in cui contenga riferimenti esterni.
Genera un token con 128 bit di entropia con un CSPRNG. Archivia questo lato server utilizzando SHA-2 per evitare che eventuali vulnerabilità di perdita di dati sulla tabella di ripristino impediscano a un utente malintenzionato di reimpostare le password. Si noti che il sale non è necessario. Scade questi token dopo un breve periodo di tempo (ad esempio alcune ore).
Oltre a fornire il token non hash per l'utente nel collegamento e-mail, dare all'utente l'opzione di accedere manualmente alla pagina e quindi incollare il valore del token. Questo può impedire che i valori della stringa di query vengano registrati nella cronologia del browser e all'interno di qualsiasi registro proxy e server per impostazione predefinita.
Opzionalmente potresti voler assicurarti che l'identificatore di sessione per la sessione che ha avviato la reimpostazione della password sia quello che ha seguito il collegare . Ciò può aiutare a proteggere un account in cui l'utente malintenzionato ha accesso alla posta elettronica dell'utente (ad esempio, impostazione di una regola di inoltro rapido di tutte le regole con accesso limitato all'account di posta elettronica). Tuttavia, tutto ciò che realmente fa è impedire a un utente malintenzionato di seguire opportunisticamente un reset richiesto dall'utente - l'utente malintenzionato potrebbe comunque richiedere il proprio token di reimpostazione per la vittima nel caso in cui desideri indirizzare il proprio sito.
Una volta che la password è stata reimpostata su una delle scelte dell'utente, è necessario scadere il token e inviare all'utente una e-mail per far sapere che ciò è accaduto nel caso in cui un utente malintenzionato sia in qualche modo riuscito a reimpostare la propria password (senza necessariamente avendo il controllo del proprio account di posta) - difesa approfondita. Dovresti ruotare anche l'identificatore di sessione corrente e scadere gli altri per questo account utente .
Ciò annulla la necessità che l'utente debba effettuare di nuovo il login, mentre cancella anche le sessioni guidate da un utente malintenzionato, sebbene alcuni utenti preferiscano che il sito effettui il log in modo che ottengano una comoda schermata di conferma che la password è stata effettivamente ripristinata. Il reindirizzamento alla pagina di accesso offre inoltre a alcuni gestori di password la possibilità di salvare l'URL di accesso e la nuova password, sebbene molti già rilevino la nuova password dalla pagina di reimpostazione.
Potresti anche prendere in considerazione altre opzioni fuori banda per il meccanismo di reset e le notifiche di modifica. Ad esempio, tramite SMS o avvisi sul cellulare.