有什么选择?我发布了当前(错误的)代码,以防有人不明白我的意思。
<?php
require_once('dbh.php');
$sql = 'SELECT * from license';
$result = mysqli_query($conn, $sql);
while ($row = $result->fetch_assoc()) {
$hash = password_verify($_POST['key'], $row['user_key']);
}
if ($hash) {
echo "Found!";
} else {
echo "Nothing found!";
}
答案 0 :(得分:2)
您应该使用password_hash
作为密码,而仅使用密码。 Bcrypt提供的安全性取决于此操作必然很慢,因此您应该尽可能少地进行测试。大多数身份管理系统在接受密码之前需要另一个因素,如用户名或电子邮件,以便针对一个记录进行测试,或者在最坏的情况下测试电子邮件已注册的所有帐户。
对数据库中的每条记录进行测试是完全不切实际的。每个请求可能需要几分钟甚至几小时。如果您正在努力加强密码破解攻击,这会很好,它会严重损害任何试图破解数据库的人,但如果这是您的登录策略,那就不好了。
API密钥无法真正加密或散列,因为它们被用作查找键。将它们存储为纯文本。如果您的应用程序受到损害,那么您处于不利地位,但至少可以使这些密钥无效并生成新密钥。纯文本或易破解密码的问题在于人们在多个站点上重复使用密码。 API密钥不适用。