使用 md5 加密密码的密码提醒


Password reminder with md5-encrypted passwords

我正在为我的网站创建"忘记密码?"页面。

显然,当新用户创建帐户时,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);

我能做什么?

切勿尝试提供允许他人恢复密码的功能。如果您正确存储密码,那么这应该是不可能的。

注意:您应该在将密码放入数据库之前对其进行哈希处理,而不是在取出密码时对其进行哈希处理,MD5 是一种不合适的哈希算法,因此您需要更好地保护用户的密码。

生成一个由随机字符组成的令牌(使其很长)。将其存储在其用户 ID(或用户表的主键)和时间戳旁边的表中。通过电子邮件向用户发送该令牌(为方便起见,将其嵌入 URL 中)。当他们点击链接时,给他们一个表格,允许他们为其帐户设置新密码(您可以从令牌中识别)。

重置密码后删除令牌,它应该是一次性使用令牌。

使用 cron 作业删除一段时间(例如 24 小时)后未使用的令牌。