我有一个需要用户名和密码的登录系统。
创建帐户后,用户输入其详细信息(姓名、地址、电子邮件密码等)。我对密码进行 md5 并将其存储在数据库中......
我的问题是如何实现忘记登录页面并对密码进行 md5 处理......我想创建一些自动电子邮件服务,将密码通过电子邮件发送到提供的电子邮件地址......但我正在努力弄清楚如何实现这一点,因为我永远无法访问明文密码,只能访问加密密码......
您不会通过电子邮件向用户发送密码。 您通常会通过电子邮件向他们发送新的自动生成的临时密码。
您生成一个新的随机密码并将其通过电子邮件发送给他们。 恢复密码是不切实际的,这是存储哈希值而不是密码的部分原因。 它使安全漏洞变得不那么严重。
您根本不需要发送用户旧密码。
您可能可以发送 1 次身份验证链接(无需密码即可登录用户)或仅发送新生成的密码。
您会注意到,大多数(信誉良好!)网站只允许您重置密码,而不向您提供旧密码。
这就是原因。 :)
当您使用 md5 密码时,几乎不可能获得明文密码。您需要做的是“重置”密码:将其设置为其他内容并将其通过电子邮件发送给用户
以下是一些选项:
在注册过程中,您可以要求用户设置一些“秘密问题和答案”。
您可以通过电子邮件向他们发送特殊链接。单击此链接后,他们可以设置新密码。
发送包含用户密码的电子邮件是一种不好的做法(一旦密码经过 md5 处理就几乎不可能)。一种替代方法是:
获取用户的电子邮件并发送允许用户更改密码的电子邮件链接。该链接应该存储在另一个数据库表中,并且应该有某种与之关联的长唯一 ID。当请求链接时,显示一个表格以更改密码。然后,
md5()
新密码并替换数据库中用户的密码。
if($_POST['submit'] == 'Send Reset Password Link') {
if(//User exists & email is valid (check mysql)) {
$db->prepare('INSERT INTO reset VALUES('', :email, :linkid)');
//etc...
mail($email, 'Password Reset for myawesomesite.com', 'Here is your link: http://www.myawesomesite.com/reset.php?id='.$linkid.'&email='.urlencode($email));
echo "Email sent";
}
}
重置.php:
if(isset($_GET['id']) && isset($_GET['email'])) {
$q = $db->prepare('SELECT id FROM reset WHERE email=:email AND linkid=:linkid');
$q->bindParam(':email', $_GET['email']);
$q->bindParam(':linkid', $_GET['id']);
$q->execute();
if($q->rowCount() == 1) {
//Show password reset form
} else {
echo "Reset link invalid";
}
}
然后您可以使用
UPDATE users WHERE email='' SET password=''
重置密码
编辑
我建议不要向用户发送临时密码,除非您的忘记密码表单在用户电子邮件之外还有一层安全保护。如果没有,任何知道用户电子邮件的人都可以重置其密码。此外,电子邮件通常未加密,我认为通过电子邮件发送密码(临时或非临时)并不安全。
美好的一天,请帮帮我,我有一个链接 https..login.phpviewfogot 我无法登录过去两天尝试的写入页面,但没有成功