You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP登录系统password_hash验证失效问题求助

问题根源与解决方案

核心错误原因

  1. 密码验证逻辑错误:password_hash()生成的哈希值包含随机盐,无法通过SQL的=直接匹配明文密码,必须用PHP内置的password_verify()函数验证。
  2. SQL注入风险:直接将用户输入的$email、$password拼入SQL语句,存在严重安全漏洞。
  3. 第二种写法未做密码验证:仅查询邮箱存在性后直接放行,导致任意密码都能登录。

修正后的Login.php代码

<?php
session_start();
// 假设$conn是已成功建立的数据库连接

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $email = trim($_POST['email']);
    $password = trim($_POST['password']);

    // 使用预处理语句查询用户信息(彻底规避SQL注入)
    $stmt = mysqli_prepare($conn, "SELECT id, password FROM users WHERE email = ?");
    mysqli_stmt_bind_param($stmt, "s", $email);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);

    if (mysqli_num_rows($result) === 1) {
        $user = mysqli_fetch_assoc($result);
        // 用password_verify验证明文密码与哈希值的匹配性
        if (password_verify($password, $user['password'])) {
            $_SESSION['user_id'] = $user['id'];
            header("Location: dashboard.php"); // 替换为你的登录后跳转页面
            exit();
        } else {
            echo "密码不正确";
        }
    } else {
        echo "该邮箱未注册";
    }

    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}
?>

关键修正点说明

  • 预处理语句防注入:通过参数绑定替代直接拼接变量,彻底避免SQL注入攻击。
  • 正确的密码验证流程:先根据邮箱查询用户的哈希密码,再用password_verify()完成明文与哈希的匹配验证。
  • 严格结果判断:确保查询到且仅查询到一个用户后,再执行密码验证逻辑。

确认Registration.php的加密逻辑(确保正确)

注册时必须正确使用password_hash()生成哈希,示例代码如下:

<?php
// 假设$conn是已成功建立的数据库连接
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $email = trim($_POST['email']);
    $password = trim($_POST['password']);

    // 生成密码哈希(默认使用bcrypt算法,自动生成随机盐)
    $hashed_password = password_hash($password, PASSWORD_DEFAULT);

    // 预处理语句插入数据
    $stmt = mysqli_prepare($conn, "INSERT INTO users (email, password) VALUES (?, ?)");
    mysqli_stmt_bind_param($stmt, "ss", $email, $hashed_password);
    if (mysqli_stmt_execute($stmt)) {
        echo "注册成功";
    } else {
        echo "注册失败:" . mysqli_error($conn);
    }

    mysqli_stmt_close($stmt);
    mysqli_close($conn);
}
?>

内容的提问来源于stack exchange,提问作者Dev.Fra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:40:33