【问题标题】:PHP password_verify("user input", $hash); not workingPHP password_verify("用户输入", $hash);不工作
【发布时间】:2017-02-25 20:11:47
【问题描述】:

我知道这个问题已经被问过很多次,但没有一个对我有用。我正在尝试创建一个简单的登录系统,它使用 password_hash() 和 password_verify() 我的数据库在密码上有 varchar(255) 只是为了确保它不会剪掉哈希的末尾,我已经确保哈希是由password_hash()生成的和数据库里的一模一样,没人看到问题吗?

这是我的 register.php 页面

<html>
<head>
    <meta charset="utf-8">
</head>

<body>
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        <input type="text" name="username" placeholder="username">
        <input type="password" name="password" placeholder="password">
        <input type="submit" name="register" value="register">
    </form>

    <?PHP

    if(isset($_POST['register'])){
require_once('connect.php');
$conn = connUsers('write');
        $stmt = $conn->prepare("INSERT INTO users(user, pass)
        VALUES(:user, :pass)");
        $stmt->bindParam(':user', $user);
        $stmt->bindParam(':pass', $hash);
        $pass = $_POST['password'];
        $hash = password_hash($password, PASSWORD_DEFAULT);
        $user = $_POST['username'];

        $stmt->execute();
        echo '<script>alert("User successfully created");</script>';
    }
    ?>
</body>

这是我的 login.php 页面

<html>
<head>
    <meta charset="utf-8">
</head>

<body>
    <form name="login-form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        <input type="text" name="username" placeholder="Username">
        <input type="password" name="password" placeholder="Password">
        <input type="submit" name="login" value="login">
    </form>
</body>

<?PHP

require_once('connect.php');
$conn = connUsers('read');
    if(isset($_POST['login'])){

        $user = $_POST['username'];
        $pass = $_POST['password'];
        $checkUser = null;

        $sql = "SELECT id, user, pass FROM users WHERE user = '$user'";

        $result = $conn->query($sql);

        foreach($result as $check){
            $checkUser = $check['user'];
            $hash = $check['pass'];
        }

        if(is_null($checkUser)){
            echo '<script>alert("User does not exist");</script>';
        }else{


            if(password_verify($pass, $hash)){

               echo '<script>alert("you have successfully logged in");</script>';
            }else{
                echo '<script>alert("Incorrect password");</script>';
            }
        }
    }
?>

谁能看出问题所在?

【问题讨论】:

  • 你在第一部分绑定参数做得这么好,然后在第二部分公然允许SQL注入......?!
  • 您是否仔细检查过在 PHP 中生成的、输入到数据库中然后从其中检索回来的哈希值是否完全相同?明文密码也一样?
  • 是的,我已确保 register.php、数据库和 login.php 中的哈希值保持不变

标签: php hash


【解决方案1】:

我在您的登录系统上找不到错误,所以我为您“制作”了这个:

<?php
   $conn = mysqli_connect("localhost", "root", "", "blog");

// Check connection
if($conn === false){
    die("ERROR" . mysqli_connect_error());
}
if(isset($_POST["login"]))  
 {  
      if(empty($_POST["username"]) || empty($_POST["password"]))  
      {  
           echo '<script>alert("Both Fields are required")</script>';  
      }  
      else  
      {  
           $username = mysqli_real_escape_string($conn, $_POST["username"]);  
           $password = mysqli_real_escape_string($conn, $_POST["password"]);  
           $query = "SELECT * FROM users WHERE username = '$username'";  
           $result = mysqli_query($conn, $query);  
           if(mysqli_num_rows($result) > 0)  
           {  
                while($row = mysqli_fetch_array($result))  
                {  
                     if(password_verify($password, $row["password"]))  
                     {  
                          //return true;  
                          $_SESSION["username"] = $username;  
                          echo 'Logged In';
                          echo '<p><a href="logout.php">Logout</a></p>';  
                     }  
                     else  
                     {  
                          //return false;  
                          echo '<script>alert("Wrong User Details")</script>';  
                     }  
                }  
           }  
           else  
           {  
                echo '<script>alert("Wrong User Details")</script>';  
           }  
      }  
 }  
 ?>  
<html>

   <head>

   </head>

   <body bgcolor = "#FFFFFF">

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
        <input type="text" name="username" placeholder="username">
        <input type="password" name="password" placeholder="password">
        <input type="submit" name="login" value="login">
    </form>
   </body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 2017-06-18
    • 2022-07-02
    • 2020-02-18
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多