最近我一直在尝试在我在互联网上偶然发现的登录脚本上实现自己的安全性。在努力学习如何制作自己的脚本来为每个用户生成盐之后,我偶然发现了 password_hash
。
据我了解(基于对 this page 的阅读),当您使用 password_hash
时,该行中已经生成了盐。这是真的?
我的另一个问题是,吃 2 种盐不是很聪明吗?一个直接在文件中,一个在数据库中?这样,如果有人在数据库中破坏了您的盐,您仍然可以直接在文件中使用它吗?我在这里读到存储盐从来都不是一个聪明的主意,但它总是让我困惑人们的意思。
最佳答案
使用 password_hash
是存储密码的推荐方式。不要将它们分离到 DB 和文件中。
假设我们有以下输入:
$password = $_POST['password'];
您首先通过这样做来散列密码:
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
然后看输出:
var_dump($hashed_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.
关于php - 如何使用 PHP 的 password_hash 来散列和验证密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279321/