gpt4 book ai didi

php - password_verify 正在返回 true

转载 作者:行者123 更新时间:2023-11-29 03:59:27 28 4
gpt4 key购买 nike

我想用 password_verify() 比较我的密码和哈希密码,但总是返回 true。为什么会这样?

代码如下:

if($_SERVER["REQUEST_METHOD"] == "POST") {
// username and password sent from form

$myusername = mysqli_real_escape_string($db,$_POST['username']);
$mypassword = mysqli_real_escape_string($db,$_POST['password']);
$hash = password_hash($mypassword, PASSWORD_DEFAULT);

$ourdb = "SELECT handle FROM qa_users WHERE handle = '$myusername' and passhash = '$mypassword'";
$ourresult = mysqli_query($db,$ourdb);
$ourrow = mysqli_fetch_array($ourresult,MYSQLI_ASSOC);
$ouractive = $ourrow['active'];
$ourcount = mysqli_num_rows($ourresult);

if(password_verify($mypassword, $hash)){
echo "hashed";
}

最佳答案

您当前正在做的是散列密码(您首先转义;您永远不应该转义密码,因为这会更改散列),然后根据您刚刚散列的值匹配/验证它,而不使用数据库中的散列- 所以它总是匹配的。这相当于设置变量 $a = 'foo';,然后检查 if ($a == 'foo') - 检查将始终返回 true。

相反,根据用户名从数据库中获取散列值,并将其用作 password_hash() 的第二个参数。

此外,

  • 不要与数据库中的哈希进行比较,获取它然后通过 password_verify() 运行它
  • 使用准备好的语句(而不是标准的 query() 方法并使用 real_escape_string())- 参见 How can I prevent SQL injection in PHP?
if($_SERVER["REQUEST_METHOD"] == "POST") {
$stmt = $db->prepare("SELECT passhash FROM qa_users WHERE handle = ?");
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();
$stmt->bind_result($hash);
$stmt->fetch();

if (password_verify($_POST['password'], $hash)) {
echo "Valid login";
} else {
echo "Invalid login";
}
$stmt->close();
}

关于php - password_verify 正在返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56972016/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com