mysql查询用散列密码更新数据库

时间:2017-04-11 11:03:37

标签: php mysql hash

我正在构建注册和登录表单,我想在注册时哈希我的用户密码,此时我的主要问题是当用户签署他的电子邮件并通过时,如何编写查询来更新密码第一次,我想在查询中添加mysqli_insert_id(),以跟踪每个用户的唯一ID。

所以我的数据库名为testdb,里面有@Override public int getItemViewType(int position) { return position == playposition ? PLAYING_LAYOUT : STILL_LAYOUT; }

我的代码完全正常工作,直到您必须查询密码并更新密码为止。

首先我要哈希我的密码

users

正如您所看到的,我的查询存在问题,应该更新数据库中的密码。

我已经编写了这段代码,所以我需要帮助才能继续我的UPDATE查询

$password = $_POST['password'];

$hashed_password = password_hash($password, PASSWORD_BCRYPT);

$query = "UPDATE `users` SET `password` = '$hashed_password' WHERE id = "

1 个答案:

答案 0 :(得分:1)

在任何情况下,您都不应以明文形式存储密码。

这意味着当您注册用户时,您应该立即散列密码并在执行insert语句时将其存储为散列格式。您当前的逻辑以纯文本形式存储密码,如果注册成功,则您尝试更新密码以成为哈希密码。这意味着如果有任何失败,你最终可能只在数据库中只有明文密码,无论哪种方式,这意味着在某个特定点它确实存在于某个给定点的纯文本中,对于我们不知道的任何用户不想要。

此外,除了浪费一些额外的代码行之外,update语句没有用处。

这样的事情应该做:

if ( mysqli_num_rows($results) > 0 ) {
    $error = "That email address is taken.";
} else { 
    $password = $_POST['password'];
    $hashed_password = password_hash($password, PASSWORD_BCRYPT);

    $query = "INSERT INTO `users` (`email`, `password`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."','".$hashed_password."') ";

    if (!mysqli_query($link,$query)) {
        $error = "<p>Could not sign you up - please try again later</p>";
    } else {
        echo "Sign up successful";
    }
}

但是,如果您真的想坚持自己的计划,那么您可以为刚刚创建的用户选择用户ID(例如,使用希望唯一的电子邮件标识符)并使用它来识别哪个用户更新。请不要这样做。

注意:我建议您查看mysqli's prepared statements以确保更高级别的安全性,而不是转发单个变量。