我正在创建"忘记密码?"我的网站的页面。
显然,当新用户创建帐户时,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);
我该怎么办?
答案 0 :(得分:4)
永远不要尝试提供允许人们恢复密码的功能。如果您正确存储密码,那么这是不可能的。
注意:您应该在将密码放入数据库之前对其进行哈希处理,而不是在将其取出并且MD5为an unsuitable hashing algorithm时进行哈希密码,因此您需要take better care个用户&#39;}密码。
生成由随机字符组成的标记(使其长很长)。将其存储在用户ID(或用户表的主键)旁边的表中以及时间戳中。通过电子邮件向用户发送该令牌(为方便起见,将其嵌入URL中)。当他们按照链接时,给他们一个表单,允许他们为他们的帐户设置一个新密码(您可以从令牌中识别)。
重置密码后删除令牌,它应该是一次性使用令牌。
删除使用cron作业某段时间(例如24小时)后未使用的令牌。