2011-01-04 11 views

risposta

7

Si dovrebbe aggiungere due campi, reset_code e reset_expiry

Questo è il processo per una funzionalità di reimpostazione password sicura.

  • L'utente seleziona "Password dimenticata".

  • Utente richiesto per e-mail/nome utente.

  • Se valido, genera un GUID e lo memorizza in reset_code e memorizza anche Ora() + 24 ore in reset_expiry nel database rispetto a quello specifico utente.

  • Quindi invia un'email all'indirizzo di posta elettronica con un collegamento per confermare la reimpostazione della password. Questa email conterrà un link al tuo sito web con il nome utente e il codice reset_code incorporati. (Ciò impedisce a un utente malintenzionato di reimpostare la password di terzi solo conoscendo la sua e-mail)

  • Una volta che l'utente fa clic sul collegamento nell'e-mail, verrà indirizzato al tuo sito web. Il sito Web convaliderà che: il nome utente e il codice reset_code corrispondono e l'ora corrente non ha superato il tempo reset_expiry.

  • Se tutto va bene, possiamo completare la reimpostazione della password. Questo può essere fatto sia:
    a) sullo schermo una nuova generata casualmente una password
    b) Una nuova password generata in modo casuale tramite e-mail
    c) La possibilità di inserire una password del suo/sua scelta

+4

Se utilizzi una password generata casualmente, assicurati di regolare la complessità in modo che corrisponda all'abilità dei tuoi utenti. Ad esempio, non utilizzare molti non-alfanumerici se non gli alleati i tuoi utenti sono esperti di computer. Assicurati anche di tagliare gli spazi vuoti dalle password immesse, dato che probabilmente verranno tagliate e cancellate dalle e-mail, che spesso prelevano spazi bianchi extra. –

+1

Alcune restrizioni e sostituzioni di caratteri sono buone idee: rimuovi '{0,1,2,3,5, l}' dall'elenco dei caratteri, metti giù tutto e applica una mappa come '[0,1,2, 3,5, l] -> [o, i, z, b, s, i] 'alla password che si ottiene dall'utente. "3" è lì perché "B" viene spesso scambiato per "3" quando non c'è un contesto familiare, gli altri dovrebbero essere chiari. –

7

Non memorizzare le password degli utenti, nemmeno in forma crittografata. È necessario memorizzare solo l'hash/digest necessario per l'autenticazione. Quindi, non è possibile "recuperare" la password (perché non la si conosce), è sufficiente ripristinarla e/o fornire all'utente una password temporanea temporanea che gli consenta di impostare una nuova password.

Aggiornamento: se si sta facendo quanto sopra, la procedura standard prevede un modulo "require-password-reset". L'utente inserisce il suo id (tipicamente la sua e-mail) e un "token" (ad esempio una stringa casuale) viene generato, memorizzato in alcune tabelle con qualche data di scadenza e inviato alla sua e-mail insieme a un link alla "password-reset" modulo. In questo modulo viene controllato il token, l'utente è autorizzato a immettere una nuova password e viene richiesto di tentare un nuovo accesso.

Aggiornamento 2: potrebbe sorgere un piccolo problema di privacy: cosa dovremmo fare se l'ID utente (email, nome utente o altro) inserito nel modulo di richiesta non esiste nel nostro database? Per emettere un messaggio "L'utente non esiste Controllare l'id e riprovare." potrebbe essere ok, ma in alcuni casi potrebbe causare un problema di privacy: chiunque può controllare se qualcuno è registrato nel tuo database! Se si desidera evitare ciò, è necessario fornire lo stesso messaggio ("una mail è stata inviata con le istruzioni ...") anche se l'utente non è stato trovato (e quindi non è stata effettivamente inviata una mail). Problemi di privacy simili consigliano di inviare solo il messaggio "login errato: utente errato o password" quando l'utente tenta di accedere senza successo - non rivelare se si tratta di un utente o una password errati.

+0

Mi scuso, effettivamente memorizzo l'hash/digest, recuperando intendevo il reset :) – TheOne

+0

+1. @ Absolute0: pensa a cosa succede se qualcuno ruba il tuo database delle password. Se le password sono sottoposte a hash, allora nessuna grande perdita (sei già stato generato, ma almeno l'autore dell'attacco non può utilizzare il database delle password per nulla). Se memorizzi le password, tuttavia, e se i tuoi utenti usano la stessa password per il tuo sito come per la loro e-mail (e lo faranno) allora ti biasimeranno quando la loro e-mail verrà hackerata ... – psmears

+0

@ Absolute0: Incrociato con il tuo commento: contento di sentire che stai facendo la cosa giusta :) – psmears

0

Sono d'accordo con Leonbloy. Memorizzare la password porta a problemi come l'incidente di Gawker da alcune settimane fa (sono state scoperte e pubblicate 1,5 milioni di combinazioni userid/pwd).

È necessario, tuttavia, disporre di una funzione di "reimpostazione della password" che invii tramite e-mail la nuova password all'indirizzo e-mail originale utilizzato per aprire l'account.

Non ci dovrebbero essere disposizioni per la modifica dell'indirizzo e-mail durante la reimpostazione della password. Se l'utente non ha più accesso al vecchio account di posta elettronica, troppo male. Abbandona l'account e ricomincia.

E utilizzare un buon Captcha nella schermata di ripristino.

Problemi correlati