你应该考虑用盐来哈希密码。 md5()算法并不是真正推荐用于安全环境,但至少可以使工作更加困难。
在数据库中保存密码时,您应该执行类似的操作
$salt = 'dhg1d9h12h1029he01h2e1'; // Just have something random and long here
$hashedpassword = md5($salt.md5($password, true)); // Or any other combination you like here
然后,您可以将$ hashedpassword保存到数据库中,如下所示:
mysql_query(sprintf("UPDATE Login SET pwd = '%s' WHERE username = '%s'",
mysql_real_escape_string($hashedpassword),
mysql_real_escape_string($username)
));然后,当您想要检查密码是否匹配时,执行与上述完全相同的步骤来计算$ hashedpassword值,但传入其测试密码,然后将其与数据库中的内容进行比较,例如:
$result = mysql_query(sprintf("SELECT (pwd = '%s') AS authenticated FROM Login WHERE username = '%s'",
mysql_real_escape_string($hashedpassword),
mysql_real_escape_string($username)
));
$row = mysql_fetch_assoc($result);
if ($row['authenticated']) {
echo "Success!";
}Aaaanyway,你看起来刚刚开始,所以我会非常小心你如何使用实际的密码验证。根据我的理解,bcrypt2是您想要使用的而不是md5,但我将让您阅读如何在PHP中执行此操作;你一定要读完这些东西。
我还会检查登录表的结构。您可能需要多个用户,否则为什么不将哈希存储在代码本身而不是数据库中呢?
此外,您可以通过检查$ _SERVER ['REQUEST_METHOD'] =='POST'来确定是否有人提交表单或获取表单,这比使用get URL参数更清晰(尽管我猜其他人没有任何问题)方法...)