我在创建“忘记你的密码?”我网站的网页。
显然,当新用户创建帐户时,php脚本使用md5算法对密码进行加密。
现在,一切正常运行,除了当用户使用“忘记密码页”请求密码提醒时,他接收的电子邮件返回用md5加密的密码,而不是真正的密码。
下面是我正在使用的代码。
$query2="SELECT password FROM users WHERE email='$email'";
$risultato2 = mysql_query($query2) or die ($query2);
while ($row = mysql_fetch_array($risultato2))
{
$passToSend = md5($row['password']);
}
echo "<center>We have sent an e-mail to <b>".$email."</b> containing a link to recover your password.</center>";
$mittente = 'From: "My website" <mywebsite@service.com> ';
$destinatario = $email;
$oggetto = "Recover your password";
$messaggio = "The password you've choosen during the sign up process is: ".$passToSend."\n\nIf you'd like to change your password, please visit http://www.mywebsite.com/mydashboard/changepwd.php\n\n Please ignore this message if you haven't requested a password reminder.";
mail($destinatario, $oggetto, $messaggio, $mittente);我能做什么?
发布于 2014-11-16 11:41:29
永远不要试图提供一个功能,让人们恢复他们的密码。如果您正确地存储密码,那应该是不可能的。
注意:在将密码放入数据库之前,您应该先对它们进行散列,而不是当您取出密码时,MD5是一种不合适的散列算法,因此您需要对用户的密码进行小心点。
生成一个由随机字符组成的令牌(使其相当长)。将其存储在其用户id (或用户表的主键)旁边的一个表中和一个时间戳中。发送电子邮件给用户(为了方便起见,将其嵌入URL中)。当他们遵循链接时,给他们一个表单,允许他们为他们的帐户设置一个新密码(您可以从令牌中识别这个密码)。
删除令牌后,重新设置密码,它应该是一次性使用令牌。
删除带有cron作业的某个时间段(例如24小时)后未使用的令牌。
https://stackoverflow.com/questions/26956453
复制相似问题