为了账号安全,请及时绑定邮箱和手机立即绑定

bcrpyt hasher 在登录到用户帐户时出现问题

bcrpyt hasher 在登录到用户帐户时出现问题

PHP
狐的传说 2022-08-19 11:01:30
我创建了一个注册和登录系统!注册没有问题。我输入所需的用户名,所需的电子邮件,所需的密码并按回车键,点击回车键后,我来到主页。问题是当我按下注销按钮时,当离开按钮将我带到登录页面时,当我重新输入用户名和密码时,我得到“不正确的用户名或密码”错误。   if (isset($_POST['register'])) {        $username = mysqli_real_escape_string($db, $_POST['username']);        $email = mysqli_real_escape_string($db, $_POST['email']);        $password = mysqli_real_escape_string($db, $_POST['password']);        $repeatpassword = mysqli_real_escape_string($db, $_POST['repeatpassword']);        $username_checker = "SELECT * FROM users WHERE username='$username'";        $email_checker = "SELECT * FROM users WHERE email='$email'";        $name_checker = mysqli_query($db,$username_checker) or die(mysqli_error($db));        $mail_checker = mysqli_query($db,$email_checker) or die(mysqli_error($db));        if(empty($username)){            array_push($errors,"Username is required");            return;        }        if(empty($email)){            array_push($errors,"Email is required");            return;        }        if(empty($password)){            array_push($errors,"Password is required");            return;        }        if(mysqli_num_rows($name_checker) > 0){            array_push($errors,"Username is already recorded in our database");            return;        }        if(mysqli_num_rows($mail_checker) > 0){            array_push($errors,"Email Address is already recorded in our database");            return;        }        if(!preg_match("/^[a-zA-Z ]*$/",$username)){            array_push($errors,"The username is only derived from uppercase and lowercase characters");            return;        }        if(strlen($_POST['username']) < 5){            array_push($errors,"Username must be at least 5 characters long");            return;        }
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

每次对密码进行哈希处理时,都会创建一个新字符串(哈希),因此,如果您尝试将散列的密码与以前散列的密码进行匹配,则该字符串将永远不会起作用。

试试这个:

if (password_verify($_POST['password'], $result['password']))
    //True if password is correct

$_POST['password']是纯文本形式提交的表单中的密码。

$result['password']是数据库中的哈希密码。

请看一下PDO准备好的语句,你的代码真的像这样危险。


查看完整回答
反对 回复 2022-08-19
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号