【问题标题】:hash variable not work in password_verify () php哈希变量在 password_verify () php 中不起作用
【发布时间】:2017-04-25 14:06:09
【问题描述】:

我使用password_hash() 对我的密码进行哈希处理,并使用password_verify(); 进行验证

当我直接在变量中写入哈希值时,值为 True

$hash = '$2y$10$lKwHxxc1YJI01ftNe33pcOvddAVrLd0GHwb3Ya3eqQJ2HxycpHjpO';

但是当我从 MySQL 调用该值时,当我把它放在这个函数中时,它的值是假的,我为这个值做回显并且值是真的,但是我不知道为什么当我把它放在 @ 时是假的987654324@

我查找有关此问题的所有先前问题,但没有找到任何答案,这是我的代码

if(isset($_POST['submit'])=="Log In") {
    $password = 'aliali12';
    $sql = mysqli_query($con, "SELECT * FROM users WHERE user_id = 1");
    $hashed_pass = mysqli_fetch_assoc($sql);
    if (password_verify("$password",$hashed_pass['user_pass'])){
        echo "Correct Password";
    }  else {
        echo 'There are some wrong';
    }
}

编辑:

这里是用来散列密码的代码:

$password = mysqli_real_escape_string($con, $_POST['changePassword']); 
$hash = password_hash("$password", PASSWORD_BCRYPT)."\n";

【问题讨论】:

  • 删除密码变量周围的""
  • 密码正确我的哈希变量有问题
  • $hashed_pass['user_pass']的内容是什么?你一开始是怎么散列的?确保该列的长度足够(至少 60 个字符),否则它可能会因为转动而默默地让您失败。
  • 你不应该在密码上使用mysqli_real_escape_string()(在散列之后,没有它就可以安全存储,因为散列中没有单引号),\n 也可能是这里的问题.
  • 在散列密码之前不要转义密码。您的示例密码无关紧要,但它会导致例如包含斜杠的密码出现问题。

标签: php mysql password-hash


【解决方案1】:

这里似乎有两个问题。来自your comment we found that...

  1. 在散列密码之前,您在密码上使用了mysqli_real_escape_string()。您不应该在插入密码之前修改密码,保持密码干净。如果密码包含例如单引号,此函数可能会更改密码。
  2. 在插入哈希之前,您已将 \n 连接到哈希,而在比较时,它没有。在插入此数据时对密码进行哈希处理时需要将其删除。

这些需要更正(real_escape() 不应出现在密码上,并删除换行符),并在进行这些更正后再次插入密码。


除此之外,

if(isset($_POST['submit'])=="Log In") {

不是你想的那样。从技术上讲,它将起作用,因为它将布尔值与 true 进行比较(因此,如果设置为 true == true,则为 false == true,否则为 false == true)。它应该只是

if (isset($_POST['submit'])) {

Cleansing User Passwords

【讨论】:

  • 那是因为他们使用了 php.net/manual/en/function.password-hash.php echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n"; 中的示例 - 太多人陷入了这个陷阱。 PHP.net 应该真正更新该页面以插入数据库。最好; trim() 会在这里工作。
  • 然后转义他们的密码,其中有类似123'\abc 的密码将是一个完全有效的密码,但稍后会默默地失败。这将被解释/更改为123\'\abc
  • @Fred !我实际上从未在示例中注意到这一点。确实不应该出现在那个例子中!
  • @Qirel 我知道。我认识的某个人向 PHP.net 的工作人员发送了一些关于它的信息,但似乎要么被置若罔闻,要么他们只是想让人们自己弄清楚。如果是后者,我认为这只是他们的无知,如果是这样的话。也许如果我们向他们发送更多关于它的消息,他们会在这方面修改手册。
猜你喜欢
  • 2017-06-18
  • 2014-12-30
  • 2016-03-31
  • 2017-11-22
  • 1970-01-01
  • 2018-02-27
  • 2022-07-02
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多