将登录密码与注册时提供的BCRYPT散列密码进行比较


compare the login password with BCRYPT hashed password provided during registration

我试图创建一个登录系统,因此我在注册password_hash($password,PASSWORD_BCRYPT)函数时加密了密码。但是,在比较用户提供的登录密码与存储在数据库中的加密密码时,我遇到了困难。

这是没有安全功能的代码,我试图比较登录密码与注册密码。如有任何帮助,我将不胜感激。

 $loginpassword=$_POST['password'];  
 $con=mysqli_connect($ip,$username,$dbpass,$dbname);
 $regpassword="SELECT password FROM customerdb WHERE username='$username'";
 $result=mysqli_query($con,$regpassword);
 $value=mysqli_fetch_fields($result);  
 if(password_verify($loginpassword,$value))
 {
  session_start();
  header(.........);
  exit();
  }

注:我使用php 5.4。因此,我包含了来自https://github.com/ircmaxell/password_compat

的password_compat

mysqli_fetch_fields方法返回一个关于数据库中列的元数据数组,而不是值。

通过mysqli_fetch_array获取密码值。您还需要检查从数据库返回的行。

$row = mysqli_fetch_array($result, MYSQLI_NUM);
if ($row) {
    $value = $row[0];
    // Verify...
} else {
    // Invalid username
}
您应该仔细阅读SQL注入,因为您的查询很容易受到攻击。