如何验证哈希密码?

问题描述 投票:0回答:1

能够在 mysql 的表上验证我的哈希密码。 它不起作用,

这是我的表格:

                <label for="email">Email</label>
                <input type="email" onkeyup="onKeyup()" onblur="onBlur()" id="email" name="email" placeholder="Akun Email" />
            </div>
            <div class="password">
                <label for="password">Password</label>
                <input type="password" id="password" onkeyup="onKeyup()" onblur="onBlur()" name="password" placeholder="Kata Sandi" />
            </div>

            <div class="submit_btn">
                <button type="submit" name="submit" id="submit">Masuk</button>
            </div>

        </form>

和我的 php :

if(isset($_POST["submit"])){
    $email = $_POST["email"];
    $userPass = $_POST['password'];
 
    $sql = "SELECT * FROM tb_kandidat WHERE email = '$email'";
    $result = mysqli_query($conn, $sql);
    $user = mysqli_fetch_array($result, MYSQLI_ASSOC);


    if($user){
        if(password_verify($userPass, $user['password'])){


            echo "success";

        }


}else{
            echo "fail";
        }

}

这是我的桌子: enter image description here

输出总是回显失败; 我哪里做错了?谢谢你

php mysql password-hash
1个回答
0
投票

您面临的问题可能与您检索和比较密码的方式有关。以下是一些常见问题以及解决方法:

1。检查密码哈希:
确保在将密码插入数据库时使用

password_hash()
对密码进行哈希处理。例如:

$hashedPassword = password_hash($userPass, PASSWORD_DEFAULT);
// Insert $hashedPassword into the database

2。修剪输入:
有时额外的空格可能会导致问题。您可以在查询数据库之前修剪输入值。

$email = trim($_POST["email"]);
$userPass = trim($_POST['password']);

3.数据库连接:
使用前请确保您的数据库连接

($conn)
已正确建立。

4。检查是否有错误:
始终检查数据库查询错误。您可以在代码中添加错误处理,以查看 SQL 查询是否存在任何问题。

$result = mysqli_query($conn, $sql);
if (!$result) {
    die('Query Error: ' . mysqli_error($conn));
}

5。使用准备好的语句:

  • 您当前的代码容易受到 SQL 注入的攻击。使用准备好的 声明来防止这种情况并使您的代码更安全。

以下是如何使用准备好的语句的修改示例:

if(isset($_POST["submit"])){
    $email = trim($_POST["email"]);
    $userPass = trim($_POST['password']);
 
    $sql = "SELECT * FROM tb_kandidat WHERE email = ?";
    $stmt = mysqli_prepare($conn, $sql);
    mysqli_stmt_bind_param($stmt, "s", $email);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $user = mysqli_fetch_array($result, MYSQLI_ASSOC);

    if($user) {
        if(password_verify($userPass, $user['password'])){
            echo "success";
        } else {
            echo "fail";
        }
    } else {
        echo "fail";
    }
}

使用准备好的语句更安全,也有助于防止 SQL 注入。确保也验证和清理您的用户输入。

© www.soinside.com 2019 - 2024. All rights reserved.