- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个更安全的页面,我从密码加密部分开始。我正在尝试实现 password_hash + password verify,但到目前为止,我一直未能使整个工作正常进行。所以,它在我的登录区域:
$username = mysqli_real_escape_string($connection, $_POST['username']);
$password = mysqli_real_escape_string($connection, $_POST['password']);
$query = "SELECT username, password FROM `users` WHERE username='$username' and user_enabled='1'";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
if($row = mysqli_fetch_assoc($result)) { $dbpassword = $row['password']; }
if(password_verify($password, $dbpassword)) {
echo "Successful login";
}else{
echo "Invalid Login Credentials.";
}
我总是收到无效的登录凭据。
当我修改用户的新密码时,我正在执行以下操作:
$pass = mysqli_real_escape_string($connection, $_POST['password']);
$options = [ 'cost' => 10,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
$password = password_hash($pass, PASSWORD_BCRYPT, $options)."\n";
$query = "UPDATE users
SET `password` = '".$password."'
WHERE id = ".$_POST['user_id']."
";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
数据库中的密码是 VARCHAR(255),它存储的内容如下:
$2y$10$Y5HIyAsLMfkXIFSJONPsfO3Gxx3b46H.8/WFdLVH3Fqk2XNfy2Uaq
我在这里做错了什么?
最佳答案
下一行中的 \n
嵌入了换行符,(编辑:不能包含在用户输入的密码中的换行符)。
$password = password_hash($pass, PASSWORD_BCRYPT, $options)."\n";
您需要删除它并使用新的哈希重新开始。
Jay Blanchard , Stack 上的成员 submitted a note关于它不太长也在password_hash()
手册,这是他和我实际谈论过的东西。
Be care when using the example from the documentation which concatenates a newline character
\n
to the end of the hash, i.e.:
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";
People are storing the hash with the concatenated newline and consequently
password_verify()
will fail.
另一种选择是使用 trim()
;这也有效(在散列时)。
$password = password_hash($pass, PASSWORD_BCRYPT, $options)."\n";
$password = trim($password);
// Store in db after
但是您仍然需要通过清除旧哈希并创建新哈希来重新开始。
不过请记住,您不应该对密码进行转义。
123'\abc
(完全有效)将被 real_escape_string()
修改为 123\'\abc
;不需要。 password_verify()
从安全角度考虑,会处理好这一点。
关于PHP password_verify 不适用于数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827437/
我的 Codeigniter(3.0 版)登录模块中有这个方法。它工作正常,但这安全吗?使用 PHP password_verify 检查登录名和密码是否有更好的解决方案?(PHP 5.6,MySQL
这个问题在这里已经有了答案: PHP password_verify not working against database (1 个回答) 关闭 5 年前。 这应该非常简单:我正在生成一个散列密
我的 Codeigniter(3.0 版)登录模块中有这个方法。它工作正常,但这安全吗?使用 PHP password_verify 检查登录名和密码是否有更好的解决方案?(PHP 5.6,MySQL
这个问题在这里已经有了答案: PHP password_verify not working against database (1 个回答) 关闭 5 年前。 这应该非常简单:我正在生成一个散列密
我正在尝试创建一个更安全的页面,我从密码加密部分开始。我正在尝试实现 password_hash + password verify,但到目前为止,我一直未能使整个工作正常进行。所以,它在我的登录区域
这里是登录代码,我试图让密码验证工作,但它不想。似乎这个 count($sql->fetchAll()) > 0 是问题所在,或者我调用了错误的变量给 password_verify()。 $
我使用 PHP 和 mySQLi 编写了简单的登录脚本。问题是 password_verify() 函数返回空变量。我已经仔细检查了所有内容,但我没有看到它。哪里有问题 ? session_start
我将用户名和加密密码存储在 mysql 数据库中。仅出于测试目的,我还将密码以未加密的形式存储在数据库中。 在下面的代码中,我从数据库中获取散列密码和未加密密码。然后我加密未加密的密码。 给定的密码未
好的,我已经在我的一个页面上使用了 password_hash。 我想知道如何将 password_verify 应用于以下代码: 函数 selectUser($conn, $username, $p
尝试从数据库验证散列密码,用户通过 POST 输入。经过一些简短的研究,这个问题似乎与无法将 mysqli_query 转换为字符串有关,尽管我不知道如何正确地做到这一点,因此我从另一个 SO 问题中
我一直在努力查找有关 password_verify() 是否使用长度常数时间比较来避免定时攻击的信息。 现在,简单的例子: $hash = '$2y$10$HH3906lfby7HOy1N3duQh
我通过 password_hash 散列我插入的密码。我使用 password_verify 验证它们。 然而,当我在我的数据库中插入一个散列密码并尝试验证它时,两个输出总是彼此不同。 我的页面如下,
函数password_verify()在新的 PHP 密码 API 中检查密码是否对应于哈希。哈希由 password_hash() 生成,默认情况下使用随机盐和 cost = 10。 我一直认为(尽
我已经为此挠头 2 个多小时了。我研究过关于 stackoverflow 的文章,包括: Issue with Bcrypt not verifying correctly php password_
我的注册脚本接受用户密码,然后使用 PHP 的 password_hash 函数对密码进行加密,然后将其放入数据库中。当我使用刚创建的用户登录时,出现检查密码是否相同的错误。就我而言,他们不是。我在登
我正在制作一个登录和注册系统。该系统可以正常工作,所以现在我必须为数据库存储的散列密码添加安全性。但是,当我从数据库中检索散列密码并将其与用户输入的密码进行比较时,它不起作用。 所以当我尝试
我正在尝试在某人登录我的网站之前检查他们的密码和用户名。密码都存储在 password_hash($password1, PASSWORD_BCRYPT); 我不确定我做错了什么。目前,无论我输入什么
我正在尝试做一个简单的登录操作,如果您可以调用的话。我正在使用MySQLi,到目前为止看起来还不错。 escape_string($myusername); $link->escape
这个问题在这里已经有了答案: php password_verify() hash and pass won't match (1 个回答) 关闭 5 年前。 $query = "SELECT *
我对这个主题进行了广泛的搜索,但没有人遇到过我能找到的相同问题。 我在 MySQL 表中创建一个用户,使用强度为 10 的 password_hash 的散列。 我一直在努力验证它,并制作了一个测试脚
我是一名优秀的程序员,十分优秀!