如何修复我的PHP密码验证码?

时间:2018-12-18 23:03:41

标签: php html mysql passwords mysql-workbench

我的项目的登录检查/密码验证代码有问题。我已经实现了用于搜索数据库以查找数据(用户名/密码)的代码,但是我想验证该数据,并且由于散列,我认为PHP找不到数据。

代码位于下面,所有方法和建议将不胜感激

h2>Administrator Login</h2>
            <form action="adminportal.php" method="post">
                <label>Username</label> <input type="text" name="adminun"/>
                <label>Password</label> <input type="password" name="adminpw"/>

                <input type="submit" name="submit" value="Submit" />
            </form>

<?php
if (isset($_POST['submit'])) {

$stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username AND password = :password');
$values = [
 'username' => $_POST['adminun'],
 'password' => sha1($_POST['adminun'] . $_POST['adminpw'])
];
$stmt->execute($values);
$user = $stmt->fetch();

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

?>

2 个答案:

答案 0 :(得分:2)

仅根据用户名而不是密码进行选择。

$stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username');
$values = [
    'username' => $_POST['adminun'],
];
$stmt->execute($values);
$user = $stmt->fetch();

然后使用password_verify对照用户记录中的密码来验证发布的密码。

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

仅当数据库中存储的密码用password_hash进行哈希处理时,此选项才有效。

答案 1 :(得分:0)

我认为您的sql应该只像这样首先基于用户名进行选择

$stmt = $pdo->prepare('SELECT * FROM admin WHERE username = :username');
$values = [
    'username' => $_POST['adminun'],
];
$stmt->execute($values);
$user = $stmt->fetch();

然后使用password_verify()验证密码