密码哈希并验证无法正常工作

时间:2016-07-19 19:42:48

标签: php

密码哈希在我的脚本中无法正常工作。

这是我的整合:

register.php

    $password = password_hash(md5(sha1($_POST['password']) . $salt), PASSWORD_DEFAULT);

以及我如何验证它:

的login.php

    $password = md5(sha1($_POST['password']) . $salt);

    $check = $mysqli->query("SELECT password FROM accounts WHERE email = '$email'");
    $passw_hash = $check->fetch_assoc();
    if (password_verify($password, $passw_hash["password"])) {
        // LOGIN SUCCESSFULLY
    }

我的PHP版本:5.5

或者,如果您有任何其他加密密码的方法,请告诉我。

更新

1-修改密码的列大小为VARCHAR(250)的VARCHAR(250)

2-删除了所有其他加密,如md5,sha1和清理代码,以保护密码免受sql注入。

哈希密码示例:

纯文字:google

哈希:$2y$10$0Bd5Uv09Jg50QZZ4Iz7F2.WGV3MpYkScg9vuTONWmUCMYPJ3qDukC

我使用mysqli:

使用预准备语句将新成员插入到我的数据库中
        $st = $mysqli->prepare("
                                    INSERT INTO
                                        accounts(
                                            username,
                                            password,
                                            date
                                        ) VALUES (
                                            ?,
                                            ?,
                                            ?
                                        )");
        $st->bind_param('sss', $username, $password, $date);
        $st->execute();

1 个答案:

答案 0 :(得分:5)

由于您使用的是password_hash(),因此您不想使用任何其他哈希值,因此请删除md5()sha1()函数。

$password = password_hash($_POST['password'], PASSWORD_DEFAULT);

此外,请从您的登录信息中删除这些功能:

$password = $_POST['password'];

通过添加其他功能,您正在销毁元素password_hash()password_verify()需要完成他们的工作。添加两个额外的散列机制也不会使散列更安全。

确保您 don't escape passwords 或在散列之前使用其他任何清理机制。这样做更改密码并导致不必要的额外编码。

此外Little Bobby your script is at risk for SQL Injection Attacks. 了解preparedMySQLi语句。即使escaping the string也不安全! Don't believe it?