【问题标题】:Password verify always returning true密码验证总是返回真
【发布时间】:2015-01-05 15:34:11
【问题描述】:

这几天我一直在尝试编写一个简单的登录。在我认为我让它工作之后,我意识到它会接受密码字段中的任何输入为真实,所以我放弃它并重新开始。我正在尝试使用 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;
    }
}

【问题讨论】:

  • @FerozAkbar 在PHP core
  • 您要比较的应该是从先前操作中注册的 db 行中提取的散列密码。
  • 那是你的“完整”代码吗?我对此表示怀疑,因为您将其标记为mysqli。向我们展示您是如何使用它的。我有一些使用这两种功能的现成脚本。
  • 密码输入,从表中选择,查询,获取数组,如果密码在使用password_verify()的行中匹配,完成。这些是基本步骤。
  • 您不应该对输入密码进行哈希处理,而是将其与在插入时进行哈希处理的已插入密码进行比较。

标签: php encryption login mysqli passwords


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您将 $hash 分配给您通过 POST 收到的密码。

    这就是password_verify 的工作原理

    boolean password_verify ( string $password , string $hash )

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

    所以现在您正在检查存储在$hash 中的密码与在 POST 中获得的密码相同。

    因此总是正确的。

    【讨论】:

      【解决方案3】:

      它总是返回 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!';
          }
      }
      

      【讨论】:

        【解决方案4】:

        你是$password 得到一个$_POST['password'];

        你是hash 一个$password 这是$_POST['password'];

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

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

        这就是为什么它们总是返回 true。因为 $passwod,hash$_POST['password'] 是相同的。

        【讨论】:

        • 谢谢,我知道了!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 2019-05-30
        • 2018-05-24
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        相关资源
        最近更新 更多