查找散列数据SQL

时间:2017-10-21 18:07:32

标签: php

星期六快乐!我正在创建一个软件,为用户分配一个密钥,然后通过" PASSWORD_DEFAULT"在PHP中并发布到数据库。用户应该在另一个文件中,然后能够写入分配的密钥,该密钥将由哈希数据库控制。 password_hash / _verify的问题在于它有目的地很昂贵:如果它被调用超过几次,脚本将会很慢。假设数据库很大,它将无法正常工作,因为它会导致超时错误。

有什么选择?我发布了当前(错误的)代码,以防有人不明白我的意思。

<?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!";
}

1 个答案:

答案 0 :(得分:2)

您应该使用password_hash作为密码,而仅使用密码。 Bcrypt提供的安全性取决于此操作必然很慢,因此您应该尽可能少地进行测试。大多数身份管理系统在接受密码之前需要另一个因素,如用户名或电子邮件,以便针对一个记录进行测试,或者在最坏的情况下测试电子邮件已注册的所有帐户。

对数据库中的每条记录进行测试是完全不切实际的。每个请求可能需要几分钟甚至几小时。如果您正在努力加强密码破解攻击,这会很好,它会严重损害任何试图破解数据库的人,但如果这是您的登录策略,那就不好了。

API密钥无法真正加密或散列,因为它们被用作查找键。将它们存储为纯文本。如果您的应用程序受到损害,那么您处于不利地位,但至少可以使这些密钥无效并生成新密钥。纯文本或易破解密码的问题在于人们在多个站点上重复使用密码。 API密钥不适用。