Il flusso normale per la reimpostazione della password di un utente per posta è questa:Ristabilimento di password per e-mail, senza una tabella del database
- generare una stringa casuale e conservarla in una tabella di database
- stringa di e-mail a utenti
- L'utente fa clic sul collegamento contenente la stringa
- La stringa è convalidata rispetto al database; se corrisponde, l'utente pw viene resettato
Tuttavia, mantenere un tavolo e scadere di vecchie stringhe ecc sembra un po 'inutile. Ci sono evidenti difetti in questo approccio alternativo?
- generare un hash MD5 della password esistente dell'utente
- stringa Email hash per utente
- utente fa clic sul link contenente stringa
- String è convalidato dal hashing ancora esistenti pw; se corrisponde, l'utente pw viene resettato
Si noti che la password dell'utente è già memorizzata in un formato hash e salato e sto ancora eseguendo l'hashing per ottenere una stringa unica ma ripetibile.
E sì, c'è un "difetto" ovvio: il link di reset così generato non scadrà finché l'utente non cambia la sua password (fa clic sul collegamento). Non vedo davvero perché questo sarebbe un problema - se la casella di posta è compromessa, l'utente è fregato comunque. E non c'è alcun rischio di riutilizzo, dal momento che una volta modificata la password dell'utente, il link di reset non corrisponderà più.
+1 per l'idea interessante –