Sto cercando di impostare uno script di recupero password php, utilizzando un token che scade dopo 24 ore, ma non sono sicuro di come procedere. Ho le password utente SHA1 crittografate al momento, tutto quello che voglio fare è aggiungere un token all'url che viene inviato all'utente quando richiedono una reimpostazione della password, ma come faccio a farlo correttamente e cosa devo fare? bisogno di memorizzare nel database?Guida PHP con ripristino della password e scadenza del token
risposta
È necessario memorizzare un timestamp univoco e un timestamp di scadenza del token. Quando gli utenti visitano l'URL univoco, è necessario convalidare il token, il nome utente e la data/ora di scadenza del token. Se tutto è a posto, è possibile inviare una nuova password o visualizzare un modulo in cui l'utente può impostare una nuova password.
- Quando l'utente richiede una reimpostazione della password, generare un token e calcolare la data di scadenza
- Conservare il token e la data di scadenza in colonne separate nella tabella degli utenti per l'utente
- Invia un'email al utente contenente il link di reset, con il token allegata alla sua URL
- Quando l'utente segue il link, afferrare il token dal tuo URL (magari con
$_GET['token']
) - Verificare il token contro la vostra tabella utenti
- Verificare che non è oltre la sua data di scadenza ancora
- Se è scaduto, invalidare, forse cancellando i campi, e permettono all'utente di inviare nuovamente
- Se il token è valido e utilizzabile, presente il modulo di reimpostazione password per l'utente
- Convalida e aggiornare la password e cancellare i campi di token e di scadenza
Suono consiglio; tuttavia, probabilmente, vale la pena notare che poiché tali token sono "equivalenti alla password", non dovrebbero essere archiviati nudi nel database: salateli e cancellateli come fanno le password degli utenti. – eggyal
vorrei andare su di esso attraverso la creazione di un altro database chiamato pessword_reset_sessions.
In modo che è possibile memorizzare le seguenti:
userid generalhash userhash timeinititated tentativi
poi con id utente isnert l'OBV id utente, con hash generale è un hash che non viene mostrato per l'utente ma usato per creare l'userhash.
timeinitiated deve essere un Timestamp UNIX di quando ha richiesto per la prima volta una nuova password.
dopo aver confermato che l'utente che sta richiedendo la password ha inserito le informazioni di convalida come e-mail, nome, domanda segreta. crei una riga all'interno della tabella di reimpostazione della password.
ed emettere un'e-mail contenente userhash.
quando l'hash torna tramite il $_GET['hash']
si quindi si crea un altro hash dal generalhash
da confrontare con l'hash che vengono tramite $ _GET [], se l'hash non corrisponde poi si incrementerà il attempts
voi puoi anche controllare in anticipo per assicurarti che non abbia fatto scattare la sicurezza per 2 tentativi.
Non utilizzerei affatto un database. Ma crittografia unidirezionale.
Basta inviare le informazioni necessarie nel collegamento ipertestuale fornito nella mail, firmato dall'hash. Qualcosa di simile
$token = sha1($user_id.$time.$user_pass.$salt).dechex(time()).dechex($user_id);
$link = "http://".$domain."/restorepass/?token=$token";
Ricevendo solo dividere e decodificare indietro, e quindi controllare hash e il timeout.
Woow, questo è intelligente :) Non lo userà, ma sembra buono :) Lo usi effettivamente da qualche parte? –
Perché "dechex (time())"? Perché è meglio che fare: "? Token = $ token & time = $ time & userid = $ user_id"? – boblapointe
Penso che questo non sia affidabile, perché un utente malintenzionato potrebbe modificare un vecchio token con un nuovo dechex (time()) per riutilizzarlo. – alvaropgl
- 1. Guida all'implementazione del ripristino della password di sicurezza primavera con URL dinamico inviato all'e-mail
- 2. Ripristino della password salvata in Filezilla
- 3. Dillo, non chiedere scadenza del principio e password
- 4. Ripristino password server chef
- 5. Come posso scoprire la data di scadenza della password di ADUser oi giorni rimasti fino alla scadenza della password?
- 6. AWS Cognito: gestione del tempo di scadenza del token
- 7. Ripristino del tempo di scadenza per un cookie in Flask
- 8. Scadenza e rinnovo del token Facebook, con Koala e omniauth-facebook
- 9. Ottieni token di accesso non in scadenza dalla casella o Ottieni token di accesso dalla casella passando UserName e Password.?
- 10. Scadenza del token di accesso OAuth di Google nell'app MVC?
- 11. Come si disattiva la scadenza della password Oracle?
- 12. check quando il mio Oracle scadenza della password
- 13. asp net web api Scadenza del token di autenticazione?
- 14. Tempo di scadenza del token di accesso Google
- 15. Come impostare la scadenza della password utilizzando ASP.NET Identity Framework
- 16. Registrazione utente Django - Ripristino password via e-mail
- 17. Token di accesso senza scadenza Facebook
- 18. Firebase 3.x - Scadenza token/sessione
- 19. OAuth - Periodo di scadenza del token di accesso?
- 20. Come impongo la scadenza del token di accesso OAuth2 con DotNetOpenAuth
- 21. Token di accesso a Facebook in scadenza per causa sconosciuta
- 22. Reimpostazione della password tramite e-mail delle password temporanee
- 23. Guida introduttiva a SAML e PHP
- 24. ripristino dello stato di recupero password
- 25. Come estrarre il token di accesso Facebook Scadenza Info
- 26. I token di posta elettronica della password degli account scadono mai?
- 27. Scadenza SAML di scadenza Spring Security con Scadenza sessione applicazione
- 28. PHP Secure Login - crittografia della password
- 29. Hash di password compatibile con Java e PHP
- 30. MassTransit con RabbitMQ: ripristino della coda errori
Aggiungo che quando l'utente accede alla pagina 'reset' si ottiene il token e la data di scadenza dal DB e si verifica SE esiste e SE è ancora valido. Se è troppo vecchio, lo si elimina dal DB. Se qualcuno di questi due, gli mostri la pagina di errore. Beh, questo può essere ovvio :) –
Sì, hai ragione, la mia soluzione è solo uno scheletro, quindi disegno: "Se tutto va bene" – fabrik