php - 使用准备好的语句验证来自 MySQL 数据库的散列密码
问题描述
我正在尝试使用password_hash()
andpassword_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();
这是数据库:
我试过的:
我真的很感激这方面的一些帮助。
非常感谢!
解决方案
您必须使用用户名而不是密码来查找散列密码,因为您不知道散列密码是什么。然后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();
推荐阅读
- javascript - 表单验证并由ajax提交后如何禁用或隐藏提交按钮?
- reactjs - React - Jest Mock 内部组件
- javascript - Promise.all.then 在各个 Promise 完成之前执行
- python - Pandas 在 multindex 上使用 loc 或 iloc 选择求和和总计
- powershell - 远程检查工作站 Bitlocker 状态时出现问题
- java - Netbeans 和 Java 平台问题
- java - 无法确定类型:字符串,表:STUDENT,列:[org.hibernate.mapping.Column(SNAME)]
- apache-camel - 在 Apache Camel 中处理依赖文件
- javascript - 如何使用 js(或 moment.js)检查日期是否超过当前日期?
- javascript - 无法使用 selenium javascript 获取 Div 的全文(直到页尾)