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

时间:2014-11-16 11:33:07

标签: php sql encryption passwords md5

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

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

我该怎么办?

1 个答案:

答案 0 :(得分:4)

永远不要尝试提供允许人们恢复密码的功能。如果您正确存储密码,那么这是不可能的。

注意:您应该在将密码放入数据库之前对其进行哈希处理,而不是在将其取出并且MD5为an unsuitable hashing algorithm时进行哈希密码,因此您需要take better care个用户&#39;}密码。

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

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

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