删除散列密码 - 无法登录

时间:2016-03-31 20:43:00

标签: php hash

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

}

1 个答案:

答案 0 :(得分:1)

停止。

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

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

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

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

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