【问题标题】:Password Verify with query not working密码验证查询不起作用
【发布时间】:2017-04-22 20:53:14
【问题描述】:

我是 php 的初学者,也许问题很简单,但是当我尝试从我的数据库中获取哈希并让密码验证完成所有工作时,它总是给我错误,即使是正确的密码。我试图从数据库中复制粘贴哈希并将其放入密码验证中,它起作用了。

$sql="SELECT * FROM users WHERE username='$myusername'";
$result=mysqli_query($connection,$sql);

// Mysql_num_row is counting table row
$count=mysqli_num_rows($result);
// If result matched $myusername, table row must be 1 row
if($count==1){
//This must be the problematic place
    $hash = mysqli_query($connection,"SELECT jelszo FROM users WHERE username =='$myusername'");
    if(password_verify($myjelszo,$hash))
    {
// Register $myusername, $myjelszo and redirect to file "login_success.php"
$_SESSION['username']= "myusername";
$_SESSION['jelszo']= "myjelszo";
header("location:login_success.php");
    }
else {
echo "Wrong Username or Password";
}

【问题讨论】:

  • 为什么不能从单个查询中获取所有详细信息
  • 您错误地使用了密码哈希函数。你为什么不阅读用法。在函数中,将哈希密码作为第一个参数,输入密码作为第二个参数

标签: php passwords password-protection


【解决方案1】:

首先,您不应该将变量直接传递给您的查询,而应该使用准备好的语句(在这种特殊情况下):

$sql="SELECT * FROM users WHERE username='$myusername'";
$result=mysqli_query($connection,$sql);

应该是这样的:

$stmt= $connection->prepare("SELECT * FROM users WHERE username=?");
$stmt->bind_param("s", $myusername);
$stmt->execute();


我在此查询中看到的另一个问题:
$hash = mysqli_query($connection,"SELECT jelszo FROM users WHERE username =='$myusername'");

双 == 应该是一个,因为这是一个 sql 查询:

$hash = mysqli_query($connection,"SELECT jelszo FROM users WHERE username ='$myusername'");

但同样,它应该通过将其转换为准备好的语句来防止注入(参见前面的示例)


接下来,我假设“$myjel​​szo”是您存储在变量中的密码,无论如何都不要清理输入。我们对此进行了讨论并进行了测试,请仔细阅读有关密码安全的帖子=> https://stackoverflow.com/a/36628423/4950530

【讨论】:

    【解决方案2】:

    有时密码验证在大多数 PHP 版本中不起作用。

    尝试改用这个:

    if ($myjelszo != $hash) {
      $_SESSION['username']= "myusername";
      $_SESSION['jelszo']= "myjelszo";
      header("location:login_success.php");
    } else {
      echo "Wrong Username or Password";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-18
      • 2016-08-16
      • 2018-06-10
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多