最近,我一直在尝试在互联网上偶然发现的登录脚本上实现自己的安全性。在尝试学习如何制作自己的脚本以为每个用户生成盐的努力之后,我偶然发现了password_hash。
password_hash
据我了解(基于本页的阅读内容),当您使用时,盐已经在行中生成password_hash。这是真的?
我的另一个问题是,吃2种盐不是很聪明吗?一个直接在文件中,另一个在数据库中?这样,如果有人破坏了数据库中的盐,您仍然直接在文件中保留了盐吗?我在这里读到,存储盐从来都不是一个聪明的主意,但是它总是让我感到困惑。
password_hash建议使用来存储密码。不要将它们分开到数据库和文件中。
假设我们有以下输入:
$password = $_POST['password'];
我不仅仅为了理解概念而验证输入。
您首先通过执行以下操作对密码进行哈希处理:
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
然后查看输出:
var_dump($hashed_password);
如您所见,它是散列的。(我假设您已执行这些步骤)。
现在,您将此hashed_password存储在数据库中,确保您的password列足够大以容纳哈希值(至少60个字符或更长)。当用户要求登录时,通过执行以下操作,可以在数据库中检查带有此哈希值的密码输入:
// Query the database for username and password // ... if(password_verify($password, $hashed_password)) { // If the password inputs matched the hashed password in the database // Do something, you know... log them in. } // Else, Redirect them back to the login page.