我正在创建一个忘记密码的页面,并将通过电子邮件向用户发送一个临时密码,这样他们就可以登录并重置密码。
创建密码时应该考虑什么,最好的方法是什么。
我的想法是这样的:$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>';
}
}发布于 2011-10-21 19:36:49
只使用一个随机字符串:用户很可能尝试从iPhone登录,但失败,请求新密码,并且仅当他在家里的PC上时才打开链接。is不同,设备不同,一切都不同。
发布于 2011-10-22 05:21:03
如果你正在通过电子邮件发送密码,就没有办法让它完全安全。电子邮件以纯文本传输。就像alf说的,用户可以从不同的IP地址重置密码,而不是从他们请求密码的IP地址。
一种选择是创建一个随机字符串,然后在密码重置页面上显示一半(在进行重置请求之后),并在电子邮件中显示一半字符串。然后要求用户在表单中输入这两个部分,然后让他们选择新密码。
https://stackoverflow.com/questions/7848785
复制相似问题