PHP password_verify 无法使用准备好的语句
PHP password_verify not functioning with prepared statement
我开始使用 mysqli 预处理语句。一切正常。我发布到 Code Review 以查看是否存在任何不可预见的错误或安全问题。在这里找到:
https://codereview.stackexchange.com/questions/194163/php-login-script
我按照说明更新了我的代码,但是我 运行 遇到了 password_verify 的问题。这是代码:
<?php
include('../include/sessions.php');
if(isset($_POST['username']))
{
$select = "SELECT username, firstname, lastname, email, userlevel, `password` FROM users WHERE username = ?;";
$stmt = $dbc->prepare($select);
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if($row && password_verify($row['password'], $_POST['password']))
{
$_SESSION['user'] = $row;
header("Location: ../cust/home.php");
die;
}
else
{
echo "The username/password combination does not match our records. Please try again.";
}
}
?>
上面的准备语句相应地执行。我可以 return 用户名、名字、姓氏等...但是密码不匹配,即使我输入正确。
数据库密码已使用 bcrypt 进行哈希处理。我不确定这是否与此错误有关。
既然无法验证密码,当然跳到else,回显密码错误
有人看到问题了吗?
根据函数的描述,需要首先输入明文密码,然后是来自数据库的散列密码 bool password_verify ( string $password , string $hash )
password_verify($_POST['password'], $row['password']))
我开始使用 mysqli 预处理语句。一切正常。我发布到 Code Review 以查看是否存在任何不可预见的错误或安全问题。在这里找到:
https://codereview.stackexchange.com/questions/194163/php-login-script
我按照说明更新了我的代码,但是我 运行 遇到了 password_verify 的问题。这是代码:
<?php
include('../include/sessions.php');
if(isset($_POST['username']))
{
$select = "SELECT username, firstname, lastname, email, userlevel, `password` FROM users WHERE username = ?;";
$stmt = $dbc->prepare($select);
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if($row && password_verify($row['password'], $_POST['password']))
{
$_SESSION['user'] = $row;
header("Location: ../cust/home.php");
die;
}
else
{
echo "The username/password combination does not match our records. Please try again.";
}
}
?>
上面的准备语句相应地执行。我可以 return 用户名、名字、姓氏等...但是密码不匹配,即使我输入正确。
数据库密码已使用 bcrypt 进行哈希处理。我不确定这是否与此错误有关。
既然无法验证密码,当然跳到else,回显密码错误
有人看到问题了吗?
根据函数的描述,需要首先输入明文密码,然后是来自数据库的散列密码 bool password_verify ( string $password , string $hash )
password_verify($_POST['password'], $row['password']))