【问题标题】:password_verify() not verifyingpassword_verify() 未验证
【发布时间】:2017-01-24 14:33:07
【问题描述】:

我正在尝试使用password_verify() 函数验证我的数据库中的散列密码,但它似乎不起作用。请帮忙。

<?php
include("config.php");
include("vendor/password.php");

session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST") {

  $username = mysqli_real_escape_string($db , $_POST['umail']);
  $password = mysqli_real_escape_string($db , $_POST['upassword']);

  $userQuery = "SELECT username, password FROM users WHERE username = '$username' AND password='$password'";
  $result    = mysqli_query($db ,$userQuery);
  $queryRow  = mysqli_fetch_array($result , MYSQLI_ASSOC);
  $queryCount = mysqli_num_rows($result);


  $verifyPassowrd = password_verify($_POST['upassword'] , $queryRow[2]);

  if ($verifyPassowrd){
    header("Location:home.php"); 
  }else{
    echo  "Username Or Password is invalid";
  }
  mysqli_close($db);
}
 ?>

【问题讨论】:

  • 确保在散列之前don't escape passwords或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。
  • password_hash() 函数可以生成一些非常长的文本(当前默认为 60 个字符),因此现在使数据库字段尽可能大将允许所需的长度。其次,PHP 团队正在向该方法添加更多算法,这意味着哈希可以并且将会增长。我们也不想限制用户使用他们选择的密码或密码短语的能力。最好为更改留出空间。
  • 向我们展示如何保存散列密码以及保存散列的表定义。
  • 不要逃避密码......我曾经为此苦苦挣扎了一段时间。直到我在我的数据库中将密码设置为 varchar(255)

标签: php security passwords


【解决方案1】:

您的密码在您的数据库中经过哈希处理。
在您的查询中,您包含一个非散列密码,因此查询的结果将是一个空集。

不需要在查询的 WHERE 子句中输入密码,因为您想在 password_verify 函数中检查返回的哈希值。

更新了 sn-p(我还修正了错字):

<?php
include("config.php");
include("vendor/password.php");

session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST") {

  $username = mysqli_real_escape_string($db , $_POST['umail']);

  $userQuery = "SELECT username, password FROM users WHERE username = '$username'";
  $result    = mysqli_query($db, $userQuery);
  $queryRow  = mysqli_fetch_array($result, MYSQLI_ASSOC);
  $queryCount = mysqli_num_rows($result);


  $verifyPassword = password_verify($_POST['upassword'], $queryRow['password']);

  if ($verifyPassword){
    header("Location:home.php"); 
  }else{
    echo  "Username Or Password is invalid";
  }
  mysqli_close($db);
}
?>

【讨论】:

  • 非常感谢@Blaatpraat,它运行良好。也感谢您的额外建议。我刚开始学习php。
  • @dela 没问题,这就是 SO 的用途。我还建议您也认真对待给定 cmets 的建议。特别是关于 SQL 注入的评论。 :)
猜你喜欢
  • 2016-05-10
  • 2014-12-30
  • 2021-05-14
  • 2017-07-06
  • 2016-05-22
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
相关资源
最近更新 更多