密码验证始终返回true

时间:2014-11-09 04:33:35

标签: php encryption login mysqli passwords

我一直在尝试写一个简单的登录几天。在我认为我有它工作之后,我意识到它会接受密码字段中的任何输入为真,所以我废弃它并重新开始。我正在尝试使用php函数password_verify进行验证,但无论我做什么,它总是返回true。有什么我做错了吗?这是我的代码(我知道它不安全,我只是想让它现在识别错误​​的密码)

if(isset($_POST['submit']))
{
    $username = $_POST['username'];
    $password = $_POST['password'];
    $hash = password_hash($password, PASSWORD_DEFAULT);

    if(password_verify($_POST['password'], $hash))
    {
        echo 0;
    }
    else
    {
         echo 1;
    }
}

4 个答案:

答案 0 :(得分:2)

它始终返回true的原因是因为您正在验证刚刚创建的哈希值...它将始终被正确验证。

使用password_verify()函数时,$hash参数必须来自其他地方(通常是某种数据库)。

// If this is a POST request then handle the form
if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // Get password from form
    $pass = filter_input(INPUT_POST, 'password', FILTER_UNSAFE_RAW);

    // Connect to a database of some kind
    // Get a previously hashed password
    $hash = 'A HASH FROM SOMEWHERE ELSE...';

    // Verify the previously hashed password
    // against the password provided by the user
    if (password_verify($pass, $hash)) {
        echo 'Password is valid!';
    }
}

答案 1 :(得分:0)

您使用发布密码检查帖子密码。您应该使用想要的密码检查帖子密码。

答案 2 :(得分:0)

您正在为通过POST收到的密码分配$hash

password_verify的工作原理

boolean password_verify ( string $password , string $hash )

验证给定的$hash是否与收到的密码匹配。

现在,您正在检查存储在$hash中的密码,并使用在POST中获得的密码相同。

因此总是如此。

答案 3 :(得分:0)

$password获得$_POST['password'];

您是hash $password $_POST['password'];

 password_verify($_POST['password'], $hash)

您正在将$_POST['password']hash进行比较。 hash也是$_POST['password']

这就是为什么他们总是返回真实。因为$passwodhash $_POST['password']是相同的。