Ciao a tutti,
sto implementando un sistema in modo che l'utente possa cambiare la password sul mio sito(in costruzione), volevo chiedervi cosa ne pensavate, ho un dubbio su un punto, ma se qualche cosa non vi convince, dite pure, ogni consiglio sarà gradito.
L'utente clicca sul bottone:
'password dimenticata'
viene presentato il form di introduzione dell'email
lato client, viene verificato che il campo email sia effettivamente un'email con una regex
tramite post viene inviato al server
lato server
si filtra la variabile
Codice PHP:
filter_input(INPUT_POST, $email, FILTER_SANITIZE_SPECIAL_CHARS);
si verifica una espressione regolare che sia effettivamente un'email
si verifica che l'email sia presente nel campo email nel nella tabella autenti del db(l'email è un campo unico)
si genera un codice casuale di 50 caratteri e si effettua il sha1 sul risultato e si aggiunge nel campo hash la stringa generata
si invia all'email il link tipo
miosito.it/cambiopw/hash_di_40_caratteri.html
l'utente clicca sul link
una pagina php riceve tramite get l'hash filtrandolo con
Codice PHP:
filter_input(INPUT_GET, $hash, FILTER_SANITIZE_SPECIAL_CHARS);
se l'hash è presente nel campo hash della tabella utenti
presento un form all'utente con un campo nascosto input contenente l'hash e 2 campi per inserire la nuova password
lato client il form non verrà inviato fino a quando non sarà di n caratteri e le 2 password non saranno uguali.
lato server filtro le due password, confronto che siano uguali, che siano minimo di n caratteri, filtro l'hash, cerco nella tabella utenti l'hash, cripto la password con sha1, la salvo nel db nella linea corrispondente, metto a null l'hash corrispondente, avviso l'utente che l'operazione è stata effettuata e gli invio una email confermandogli che la sua password è stata cambiata.
Domanda:
Quando l'utente clicca sul bottone 'passworddimenticata', inserisce un'email e la invia, pensavo di NON avvisare l'utente se l'operazione sia o meno andata a buon fine, ovvero dirgli, in qualsiasi caso, che l'email è stata inviata, cosa ne pensate?
Inoltre stavo pensando di implementare un sistema(l'ho già fatto per altri form) che un determinato ip possa inviare solo una richiesta ogni 30 secondi(inviare un form con la richiesta di una nuova pw), se continua ad inviarle alla quinta richiesta l'ip viene messo in una tabella lista_nera, tabella che verrebbe controllata all'invio di ogni form di richiesta di cambio password.
Se l'ip è presente in questa tabella, blocca l'invio di qualsiasi nuova richiesta di cambio password e produce una pagina di errore, dicendo che si è verificato un errore e di riprovare più tardi(posso pensare di bloccarlo solo per un certo tempo), cosa ne pensate?
Grazie,
Roberto