【发布时间】:2019-01-19 16:50:37
【问题描述】:
我对有效的哈希密码有疑问:
login.php
$login = $_POST['login'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
if(!empty($login) && !empty($password) && password_verify(??){
我想进行安全登录,并且我知道我必须使用现有哈希(存储在数据库中?)验证输入的密码。我也知道 bcrypt 每次都会产生新的哈希(因为不同的盐大小等)。
问题是我不知道如何将此哈希放入数据库,因为我不想注册新用户,我有静态用户列表(正好两个:管理员和用户)。
我尝试手动复制/粘贴哈希,但它不起作用,正如我之前提到的,每次运行脚本时都会创建新的哈希。
谁能帮助我如何将 bcrypt 哈希放入数据库(仅一次),这样我只能检查输入的密码是否与数据库中的密码相同?
我需要额外的变量来存储这个哈希吗?
编辑:
login.php
<?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");
?>
它似乎正在工作,但我不知道它是否是最好/最安全的解决方案。
有了更多密码,我想它会太复杂,仍在寻找最佳选择!
如果我需要更多用户怎么办?现在每个用户都有相同的哈希,我得到它很危险,如何让它安全?为每个用户生成哈希并制作数组或哈希?
【问题讨论】:
-
只要将哈希值存储在你存储静态用户列表的任何地方,然后使用password_verify将提交的密码与哈希值进行比较
-
我认为这篇文章描述了解决这个问题的最佳方法:stackoverflow.com/questions/4795385/…
-
@JimL 感谢您的回答,您的意思是将其存储在脚本中?当我谈到静态用户列表时,我说的是数据库。我应该在哪里存储这种信息?有什么想法吗?
-
@ChristopherHughes 所以如果我想拥有 10 个用户,我需要存储 10 个哈希值吗?我还需要和他们每个人一起进行密码验证吗?我知道对此有更好的答案。
-
@dmnmlk 如果数据库中有用户,则将哈希添加到同一个表中
标签: php bcrypt php-password-hash