正在删除哈希密码-无法登录


Removing hashed password - cannot log in

EDIT:半解。我现在可以将不安全的密码存储在数据库中,也可以登录。下一步是再次尝试为忘记的密码创建一个安全机制(以及md5加密)。


我正试图从我的密码中删除md5哈希,这样我就可以很容易地将密码发送给用户的电子邮件,以防他忘记(我尝试了几种使用md5加密生成新密码的解决方案,但都失败了。所以我想用这种简单但有点不安全的方式来做)。

我有以下代码,它以哈希格式将密码存储在数据库中。我也可以毫不费力地登录。。。然而,如前所述,我想删除哈希。我删除了

$new_password = password_hash($upass, PASSWORD_DEFAULT);

并将"$new_password"更改为"$upass"。

当我查看数据库时,我可以看到一个非哈希密码,这正是我想要的。但是,我不能再使用非哈希密码登录。这不是很奇怪吗?我可能做错了什么?

这是我的注册码的一个片段。

include_once 'dbconnect.php';
if(isset($_POST['btn-signup']))
{
$uname = $MySQLi_CON->real_escape_string(trim($_POST['user_name']));
$email = $MySQLi_CON->real_escape_string(trim($_POST['user_email']));
$upass = $MySQLi_CON->real_escape_string(trim($_POST['password']));
$phone = $MySQLi_CON->real_escape_string(trim($_POST['phone']));
$new_password = password_hash($upass, PASSWORD_DEFAULT);
$check_email = $MySQLi_CON->query("SELECT user_email FROM users WHERE user_email='$email'");
$count=$check_email->num_rows;

if($count==0){

    $query = "INSERT INTO users(user_name,user_email,user_pass,user_phone) VALUES('$uname','$email','$new_password','$phone')";

    if($MySQLi_CON->query($query))
    {
        $msg = "<div class='alert alert-success'>
                    <span class='glyphicon glyphicon-info-sign'></span> &nbsp; successfully registered !
                </div>";
    }
    else
    {
        $msg = "<div class='alert alert-danger'>
                    <span class='glyphicon glyphicon-info-sign'></span> &nbsp; error while registering !
                </div>";
    }
}
else{

    $msg = "<div class='alert alert-danger'>
                <span class='glyphicon glyphicon-info-sign'></span> &nbsp; sorry email already taken !
            </div>";
}
$MySQLi_CON->close();

}

停止。

甚至不要考虑任何允许你(作为一名开发人员)以某种方式获得用户的纯文本密码的事情。

原始问题的解决方案非常简单,不需要以明文形式存储用户的密码。如果用户忘记了密码,您可以执行以下操作:

  • 创建一个TAN(一个长随机数)并将其保存在数据库中
  • 将TAN发送给您的用户(当然集成在URL中)
  • 当用户点击URL时,他最终会出现在你的网站上的"密码重置"功能中
  • 你要求他提供他的邮件地址或用户名(无论你用什么来识别用户)和新密码
  • 您可以查找TAN,验证它是正确的邮件地址或用户名,然后将其删除
  • 您对新密码进行散列运算并将其存储在数据库中

(当然,这是假设攻击者无法获得邮件;你可以考虑采取任何进一步的措施来使其更安全。一种流行的措施是"秘密",如"你第一只宠物的名字"等;你可以给他们发短信,不管怎样…但那是另一回事)。

在任何情况下,你都不会处理纯文本密码,这完全是不可行的,而且非常疏忽。

尝试更改

$new_password = password_hash($upass, PASSWORD_DEFAULT);

$new_password = $upass;

我也遇到过这个问题。当我改变它的时候,它对我有用!