Inizierò col dire che non ho idea se esista una buona pratica al riguardo, ma andrò avanti e risponderò con due punti di vista in mente; la vista di sicurezza e la vista utente ...
Prima di tutto, quando viene richiesta una password, la password non deve essere rimossa. Cosa succede se l'utente all'improvviso ricorda la propria password? Dovrebbero essere in grado di accedere senza la richiesta di ripristino che influisce sulla loro esperienza. Invece una stringa casuale generata in tempo (lotto di entropia) generata dovrebbe essere generata e memorizzata con l'utente come l'ultimo identificatore di richiesta di reset. Dovrebbe essere anche memorizzato un timestamp. Quindi il link che l'utente fa clic nella e-mail dovrebbe contenere quel codice ontime e il loro indirizzo e-mail per poter effettivamente resettare. Puoi anche controllare il timestamp impostato per vedere se la richiesta è stata fatta negli ultimi 15 minuti circa (solo un esempio). L'altro punto in questo è che se la persona in realtà non ha richiesto, dovrebbero comunque essere in grado di accedere.
In secondo luogo, il modo migliore per limitarlo è usare qualcosa come reCaptcha. Sarà fastidioso per l'utente costantemente spammare.
In terzo luogo, non penso che sia necessario inviare più di 2 email in una finestra temporale specifica.
Penso che il maggior rischio per la sicurezza qui sia qualcuno che impone la tua pagina di password dimenticata per scoprire le informazioni di accesso dell'account. Essere in grado di rilevare che qualcuno è bruce, forzare la tua pagina "Password dimenticata" sarebbe enorme. Forse registrando il numero di richieste di reset dell'account da un indirizzo IP specifico e osservando quando quel numero diventa troppo alto in un certo periodo di tempo e richiedendo alla persona di inviare una email a [email protected] per ottenere il reset dell'account. [Ti consigliamo di giocare con i numeri qui perché devi considerare le persone che stanno dietro NATs, in particolare i dipendenti delle grandi aziende ... non sai mai quando tutti dimenticheranno la password nello stesso giorno].