如何修复我的php密码验证代码?

guicsvcw  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(307)

我的项目的登录检查/密码验证代码有问题。我已经实现了搜索数据库以查找数据(用户名/密码)的代码,但是我想验证该数据,并且由于散列,我认为php无法找到该数据。
代码放在下面,任何方法和建议将不胜感激

  1. h2>Administrator Login</h2>
  2. <form action="adminportal.php" method="post">
  3. <label>Username</label> <input type="text" name="adminun"/>
  4. <label>Password</label> <input type="password" name="adminpw"/>
  5. <input type="submit" name="submit" value="Submit" />
  6. </form>
  7. <?php
  8. if (isset($_POST['submit'])) {
  9. $stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username AND password = :password');
  10. $values = [
  11. 'username' => $_POST['adminun'],
  12. 'password' => sha1($_POST['adminun'] . $_POST['adminpw'])
  13. ];
  14. $stmt->execute($values);
  15. $user = $stmt->fetch();
  16. if (password_verify($_POST['adminpw'], $user['password'])) {
  17. $_SESSION['loggedin'] = $user['id'];
  18. }
  19. else {
  20. echo 'Sorry, your account could not be found';
  21. }
  22. }

?>

eimct9ow

eimct9ow1#

选择仅基于用户名,而不是密码。

  1. $stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username');
  2. $values = [
  3. 'username' => $_POST['adminun'],
  4. ];
  5. $stmt->execute($values);
  6. $user = $stmt->fetch();

然后使用 password_verify 根据用户记录中的密码验证发布的密码。

  1. if (password_verify($_POST['adminpw'], $user['password'])) {
  2. $_SESSION['loggedin'] = $user['id'];
  3. }
  4. else {
  5. echo 'Sorry, your account could not be found';
  6. }

只有在数据库中存储的密码被哈希处理时,这才起作用 password_hash .

展开查看全部
nqwrtyyt

nqwrtyyt2#

我认为您的sql应该首先像这样选择baseonlyusername

  1. $stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username');
  2. $values = [
  3. 'username' => $_POST['adminun'],
  4. ];
  5. $stmt->execute($values);
  6. $user = $stmt->fetch();

然后使用password\u verify()验证密码

相关问题