忘记登录-PHP问题
我有一个使用用户名和密码的登录系统 创建帐户后,用户输入其详细信息(姓名、地址、电子邮件密码等)。我需要输入密码并将其存储在数据库中忘记登录-PHP问题,php,jquery,html,login,md5,Php,Jquery,Html,Login,Md5,我有一个使用用户名和密码的登录系统 创建帐户后,用户输入其详细信息(姓名、地址、电子邮件密码等)。我需要输入密码并将其存储在数据库中 我的问题是如何实现一个忘记登录页面,并将密码设置为md5……我想创建一个自动电子邮件服务,将密码通过电子邮件发送到提供的电子邮件地址……但鉴于我从未访问过明文密码,我很难弄清楚如何实现这一点,只有加密的密码…您可以生成一个新的随机密码并通过电子邮件发送给他们。恢复密码并不实际,这也是存储哈希而不是密码的部分原因。这会降低安全漏洞的重要性。您根本不需要向用户发送旧密
我的问题是如何实现一个忘记登录页面,并将密码设置为md5……我想创建一个自动电子邮件服务,将密码通过电子邮件发送到提供的电子邮件地址……但鉴于我从未访问过明文密码,我很难弄清楚如何实现这一点,只有加密的密码…您可以生成一个新的随机密码并通过电子邮件发送给他们。恢复密码并不实际,这也是存储哈希而不是密码的部分原因。这会降低安全漏洞的重要性。您根本不需要向用户发送旧密码
您可能可以发送一次身份验证链接(用户无需密码登录)或只发送新生成的密码。您不需要通过电子邮件向用户发送密码。您通常会通过电子邮件向他们发送一个新的自动生成的临时密码。您会注意到,大多数(信誉良好的!)网站只允许您重置密码,而不允许您使用旧密码
这就是为什么。:) 使用md5密码时,几乎不可能获得明文密码。您需要做的是“重置”密码:将其设置为其他密码,然后通过电子邮件发送给用户发送包含用户密码的电子邮件是一种不好的做法(而且一旦密码被md5'ed,这几乎是不可能的)。一种选择是: 获取用户的电子邮件并发送电子邮件链接,允许用户更改密码。链接应该存储在另一个DB表中,并且应该具有某种与之相关联的长唯一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";
}
}
reset.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";
}
}
然后您可以使用updateusers,其中email=''SET password=''
编辑我建议不要向用户发送临时密码,除非您的忘记密码表单具有用户电子邮件之外的安全层。如果没有,任何知道用户电子邮件的人都可以重置密码。此外,电子邮件通常是未加密的,并且我认为通过电子邮件发送密码(临时或不)是不安全的。 < P>这里有一些选项:
- 在注册过程中,您可以要求用户设置一些“秘密问题和答案”
- 当用户初始化重置密码功能时,他可以回答这些问题并重置密码
- 或者,在正确回答问题后,您可以通过电子邮件向他发送新的临时密码
- 你可以通过电子邮件向他们发送一个特殊链接。单击此链接后,他们可以设置新密码