Possibile modo di gestire più email di reimpostazione della password

1

È un progetto C #, ASP.NET MVC ed ecco il problema:

L'utente può inserire il proprio indirizzo e-mail nel campo di testo per la reimpostazione della password e fare clic sul pulsante Reimposta password. Ogni volta che l'utente fa clic sul pulsante Reimposta password, verrà inviata una nuova e-mail a tale indirizzo email.

Sto tentando di limitare l'email della password di reimpostazione utente a una sola volta ogni x ore.

Quali sono le possibili soluzioni?

Ecco quello che ho in mente finora, ma immagino ci siano altri modi più intelligenti:

  1. Crea un cookie sul lato client una volta arrivata la prima richiesta di reimpostazione della password e imposta la data di scadenza del cookie su x ore. Finché il cookie esiste, non consentire all'utente di reimpostare la propria password. (Il problema è che l'utente può facilmente utilizzare un browser diverso o rimuovere manualmente quel cookie)

  2. Crea una nuova tabella DB e inserisci l'indirizzo email dell'utente e la data di scadenza in quella tabella. Quando l'utente prova a reimpostare la sua password, fino a quando il record esiste nel DB, non consentire l'invio futuro di email di reimpostazione della password.

posta Benjamin 24.07.2017 - 04:27
fonte

3 risposte

3

Il secondo approccio funziona bene. Ho usato qualcosa di simile in un recente progetto. Quando qualcuno richiede una reimpostazione della password, genera il codice di verifica (utilizzato per il collegamento di verifica) e lo inserisce in una tabella insieme all'indirizzo e al timestamp. Se viene richiesta nuovamente una reimpostazione della password, controlla prima quella tabella e non invierà l'e-mail se è stata fatta un'altra richiesta negli ultimi X minuti.

Esiste un'attività periodica che passa e cancella tutte le voci di reimpostazione della password man mano che scadono (ad esempio, dopo 24 ore).

    
risposta data 24.07.2017 - 18:18
fonte
2

La tua affermazione sui cookie è corretta. I biscotti sono nelle mani del nemico. Non sono a prova di manomissione, quindi non è possibile utilizzare la mancanza di un cookie come prova che l'utente non ha visitato il sito in precedenza.

Invece di creare una nuova tabella di database, è sufficiente aggiungere un campo last_password_reset_mail_send_timestamp alla tabella degli account utente generale. Quando l'utente (presunto) desidera una reimpostazione della password per un account, verificare se last_password_reset_mail_send_timestamp è inferiore alla data / ora corrente meno l'intervallo di tempo configurato tra le reimpostazioni.

La ragione per salvare l'inizio del periodo di reset-forbidden invece della fine è che con quel design la modifica dell'impostazione temporale influisce anche sulle vecchie voci del database.

    
risposta data 24.07.2017 - 16:07
fonte
0

Sono d'accordo che i cookie sono una cattiva soluzione. Sarà meglio se tracciamo in una nuova colonna l'ultimo timestamp della richiesta di modifica della password e controlliamo se è sotto x hrs se è l'utente dovrebbe essere mostrata un'altra pagina di verifica dicendo che non ha ricevuto l'email? per favore riattivare qui solo per dare una coperta di smarrimento della posta elettronica o dare un messaggio di riprova post x min.

    
risposta data 26.07.2017 - 08:23
fonte