密码哈希在我的脚本中无法正常工作。
这是我的整合:
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();
答案 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. 了解prepared的MySQLi语句。即使escaping the string也不安全! Don't believe it?