删除散列密码 - 无法登录

问题描述 投票:-4回答:1

编辑:半解决。我现在可以将不安全的密码存储在我的数据库中并登录。下一步是再次尝试为忘记密码创建安全机制(以及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();

}

php hash
1个回答
1
投票

停止。

甚至不要考虑允许您(作为开发人员)以某种方式获取用户的纯文本密码的任何内容。

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

  • 创建一个TAN(一个长随机数)并将其保存在您的数据库中。
  • 将TAN发送给您的用户(当然,集成在URL中)。
  • 当用户点击该网址时,他会在您的“密码重置”功能中结束您的网站。
  • 您询问他的邮件地址或用户名(无论您用什么来识别用户)和新密码。
  • 您查找TAN,验证它是正确的邮件地址或用户名并删除它。
  • 您将新密码哈希并将其存储在数据库中。

(当然,这假设攻击者无法收到邮件;你可以考虑采取任何其他措施使其更安全。一个受欢迎的是“秘密”,如“你的第一只宠物的名字”等;你可以给他们发短信,不管......但这是另一个故事)。

在任何时候你都没有处理纯文本密码,这是完全禁止的,非常缺乏。

© www.soinside.com 2019 - 2024. All rights reserved.