Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera!
Tenho um sistema onde passam varios usuários por dia. Recentemente meu cliente sugeriu fazer um "esqueci minha senha" para evitar contatos telefonicos caso isso aconteça.
A lógica me parece simples e a construção também.
- Clica no link "Esqueci a senha", redirecionando para um form onde a pessoa preenche seu login de acesso (no caso, email);
- Envia um e-mail para o usuário, pedindo para confirmar através de um clique a geração de uma nova senha;
Aí que está o problema. Se eu gerar um link para recuperar a senha, isso não tornaria o sistema vulnerável?
Ex: pagina.com/gerar-nova-senha?e=maykel@meudominio.com
Com isso, qualquer pessoa poderia alterar a senha do outro... mesmo criptografando isso em um hash de 64bits (com base64_encode/decode), qualquer pessoa com um pouco de conhecimento de causa poderia mudar a senha.
Como reverter isso? Infelizmente preciso passar o parametro via URL para meu sistema identificar qual email precisaria ser mudado, hehe.
Humm... como será que eu gero um token?
Eu estou pensando em concatenar a variavel do e-mail + data e hora da criaçao, gerar um base64 com isso e deixar válido por apenas 10min. Será que já resolve?
trabalhe com md5.
base64 tem volta e isso pode ser um problema de segurança
Fazendo uma consulta no banco com md5? Pode ser... Mas neste caso, não poderei ter um "expirador", já que a minha ideia era converter a string (email+data).
Ai sim fica inseguro.
Eu não enviaria email + data na URL.
Enviaria apenas o token, em md5 ou whatever...
Ai vc teria uma tabela temporária, que ligaria o token as informações que vc precisa (TABLE reset_password [ token, email, data ])
Ou sha1
$token = sha1( uniqid(rand(), true) );
>
pagina.com/gerar-nova-senha?e=$token
Apos o pedido armazene o token em um tabela ou campo de forma temporária, depois é só comparar, se o token for válido libera o formulário de troca, senão peça para o usuário gerar um novo token.
Tem sistemas que este token tem a vida útil de 02 a 24 horas.
Humm saquei! Neste caso, seria ideal ter uma tabela no banco apenas para isso então.
Legal, já saquei a teoria aqui ;-)
Muito obrigado @William e @Williams!
Geralmente é usado um token(aleatório ou não) com um tempo de expiração, e vc tb pode usar isso para garantir q ninguém que não tenha o email possua acesso ao link de troca.