【问题标题】:Verify hashed passwords from MySQL database using Prepared Statements使用准备好的语句验证来自 MySQL 数据库的散列密码
【发布时间】:2020-08-08 13:43:44
【问题描述】:

我正在尝试使用password_hash()password_verify() 函数从我的MySQL 数据库验证我的用户的哈希密码。我正在尝试使用准备好的 PHP 语句来增加安全性,但没有运气。有谁知道为什么?

代码如下:

//check if password is linked to username
$checkpass = $conn->prepare("SELECT user_password FROM user_details WHERE user_password=?");
$checkpass->bind_param("s", $preppass);
$preppass = $password;
$getpass = $checkpass->execute();

//get and check result
$checkpass->bind_result($getpass);
$checkpass->fetch();
if (!password_verify($password, $getpass)) {
    echo "<script>console.log('Incorrect username or password!')</script>";
    return false;
    exit;
}
echo "S<script>console.log('Successfully logged in!')</script>";
$conn->close();

这里是数据库:

Database Layout

我尝试过的:

Unable to extract password hash from database with prepared statements

Verify hashed password from database

非常感谢您对此的帮助。

非常感谢!

【问题讨论】:

  • 你得到的输出是什么?

标签: php sql prepared-statement password-hash


【解决方案1】:

您必须使用用户名而不是密码来查找哈希密码,因为您不知道哈希密码是什么。然后使用password_verify() 来检查输入的密码是否与散列密码匹配。

$checkpass = $conn->prepare("SELECT user_password FROM user_details WHERE username=?");
$checkpass->bind_param("s", $username);
$checkpass->execute();

//get and check result
$checkpass->bind_result($getpass);
$checkpass->fetch();
if (!password_verify($password, $getpass)) {
    echo "<script>console.log('Incorrect username or password!')</script>";
    return false;
    exit;
}
echo "S<script>console.log('Successfully logged in!')</script>";
$conn->close();

【讨论】:

    【解决方案2】:

    因为你准备好的 SQL 语句使用了? (WHERE user_password=?"),看起来$checkpass-&gt;bind_param("s", $preppass); 正在尝试将$prepass 绑定到不存在的参数:s

    要么使用WHERE user_password=:s"(声明一个命名语句参数),要么使用$checkpass-&gt;bind_param(1, $preppass);(将你的普通密码绑定到语句中的第一个?)。

    As per the documentation..

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      相关资源
      最近更新 更多