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

时间:2014-07-13 02:37:24

标签: php mysqli bcrypt

我正在尝试创建一个登录系统,因此我在注册时使用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();
  }

P.S。我使用的是PHP 5.4。因此我在https://github.com/ircmaxell/password_compat

中加入了password_compat

1 个答案:

答案 0 :(得分:0)

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

要获取密码值,请使用mysqli_fetch_array。您还需要检查从数据库返回的行。

$row = mysqli_fetch_array($result, MYSQLI_NUM);
if ($row) {
    $value = $row[0];
    // Verify...
} else {
    // Invalid username
}

您应该阅读SQL注入,因为您的查询容易受到攻击。