我对有效的哈希密码有疑问:
$login = $_POST['login'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
if(!empty($login) && !empty($password) && password_verify(??){
我想进行安全登录,我知道我必须用现有的哈希验证输入的密码(存储在数据库中?)。另外我知道bcrypt每次都会产生新的哈希值(因为盐的大小不同等)。
问题在于我不知道如何将此哈希值放入数据库,因为我不想注册新用户,我有静态用户列表(正好两个:管理员和用户)。
我尝试手动复制/粘贴哈希,但它不会像我前面提到的那样工作,每次我运行脚本时都会创建新哈希。
任何人都可以帮我解决如何将bcrypt哈希放入数据库(只有一次)所以我只能检查输入的密码是否与数据库中的密码相同?
我是否需要额外的变量来存储此哈希?
修改
<?php
session_start();
include("log.php");
include("pdo.php");
$login = $_POST['login'];
$password = $_POST['password'];
$adminHash = '$2y$10$lxPRtzzPDUZuPlodhU4QquP.IBrGpkjMNplpNgN9S1fEKd64tJ5vm';
$userHash = '$2y$10$Klt345wT66vA.4OAN5PEUeFqvhPQJ4Ua/A4Ylpc1ZcnJZv/hafgSu';
if(!empty($login) && !empty($password) && (password_verify($password, $adminHash) || password_verify($password, $userHash))){
$query = $pdo->prepare('SELECT * FROM xx WHERE login = ? AND admin = ?');
$query->execute(array( $login, 1));
$result = $query->fetchAll();
if(!empty($result)) {
$_SESSION['logged_admin'] = 1;
}
else {
$query->execute(array( $login, 0));
$result = $query->fetchAll();
if(!empty($result)) {
$_SESSION['logged_user'] = 1;
}
else {
$_SESSION['logged_error'] = 1;
}
}
}
else $_SESSION['logged_error'] = 1;
header("Location:index.php");
?>
它似乎有效,但我不知道它是否是最好/最安全的解决方案
使用更多的密码,我猜想它仍然太复杂了,仍然在寻找最好的选择!
如果我需要更多用户怎么办?现在每个用户都有相同的哈希,而且它很危险,如何让它安全?为每个用户生成哈希并生成数组或哈希值?
答案 0 :(得分:1)
您首先从数据库中获取具有password_hash()的密码,然后将其与password_verify($ password,$ storedpassword)进行比较,例如:link