我正在创建一个忘记的密码页面,并将向用户发送临时密码,以便他们登录并重置密码。
创建密码时我应该考虑什么,最好的方法是什么。
我的想法是:$temporarypassword = sha1($_SERVER['REMOTE_ADDR'])
试图只允许他们从他们请求临时密码的ip地址登录。这样做的最佳方法是什么?
到目前为止代码:
if(strpos($_SERVER['HTTP_REFERER'],'domain.com') && ($_POST['forgotpasstoken'] == sha1($_SESSION['token'].'forgotpassword'))){
if(isset($_POST['forgotemail']) && !empty($_POST['forgotemail'])){
$email = mysql_escape_string(trim($_POST['forgotemail']));
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE){
echo '<div class="error">Please enter a valid email address.</div>';
} else {
$sql = "SELECT email FROM users WHERE email = '$email' LIMIT 1";
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res) > 0) {
//If email/user exists
$temporarypassword = sha1($_SERVER['REMOTE_ADDR'])
//EMAIL PASSWORD HERE
echo '<div class="success">A temporary recovery password has been emailed to you.</div>';
//If email/user exits
} else {
echo '<div class="error">This email is not registered.</div>';
}
}
} else {
echo '<div class="error">Please enter an email address.</div>';
}
}
答案 0 :(得分:2)
只使用随机字符串:用户很可能尝试从例如iPhone失败,请求新密码,只有当他在家里的电脑上时才打开链接。 IP不同,设备不同,一切都不同。
答案 1 :(得分:1)
如果您通过电子邮件发送密码,则无法使其完全安全。电子邮件以纯文本形式传输。和alf所说的一样,用户可以从与他们请求的IP地址不同的IP地址重置密码。
一个选项是创建一个随机字符串,然后在密码重置页面上显示一半(在发出重置请求之后)和电子邮件中字符串的一半。然后要求用户在让他们选择新密码之前在表单中输入两个部分。