【问题标题】:How should I hash passwords before posting and then using BCRYPT?在发布然后使用 BCRYPT 之前,我应该如何散列密码?
【发布时间】:2018-11-07 18:27:27
【问题描述】:

我正在制作一个登录系统,登录时密码当前从 JavaScript 发送到 PHP 文件。

在 PHP 中,我使用以下代码进行哈希处理。

$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);

在使用 POST 发送密码之前,我应该如何在 JavaScript 中对密码进行哈希处理?

我显然不想影响 BCRYPT 的安全。

【问题讨论】:

  • 在客户端散列并不能使其更安全。使用HTTPS进行通信,在服务器端使用密码哈希+加盐来存储密码。
  • 使用 SHA1 或 SHA2 对 MySQL 进行密码哈希,然后与数据库的客户端密码的 SHA 进行比较。使用 SSL 保护通过线路的数据。
  • 无论使用 https,都应该在前端对密码进行哈希处理。解释见这里:stackoverflow.com/a/21716654/43615

标签: javascript php password-hash


【解决方案1】:

在客户端所做的事情并不是由您真正控制的。我的意思是,即使您对密码进行哈希处理,客户端也有可能在哈希/加密之前获取密码。

var password = document.getElementById('login').value;
console.log(password); // It is as simple as it
//hash password...

上面有一个简单的例子来解释,客户端可以像这样获取密码,或者其他人可以使用XSS 攻击来获取它。您应该尽最大努力保护您的客户端免受 XSS 攻击,但是您无法控制客户端发生的事情。

如果您担心Man In The Middle (MITM) 攻击,最重要的是使用具有正确算法的 TLS 证书(这取决于您服务器的 OpenSSL 版本)。
简而言之,您应该使用 HTTPS 来保护您的客户端免受 MITM 攻击。

所以据我说,在发送之前不需要对密码进行哈希/加密。

【讨论】:

  • 谢谢,这完全解释了我的担忧(以及我的错误)。
  • 不客气!有时很难理解客户端是不安全的。有一条规则从不信任用户输入,这是因为浏览器不受您控制。因此,您应该尽可能地保护它,但无法确定它的安全性。
【解决方案2】:

如果你愿意,你可以在客户端玩一些 bcrypt 实现(搜索“bcrypt js”,有一个example of implementation)。

但是,这意味着您必须在服务器和客户端之间使用相同的盐值。 This answer 解释。

因此,如果客户端遭到入侵,您的秘密服务器盐值也会受到影响

但是,你的意思是什么?如果您认为发送和比较哈希而不是发送一次普通密码并在服务器端对其进行哈希处理更安全,那您就错了。中间的人会窃取密码或哈希值并破坏安全性。

正确答案已在评论中给出:您最好使用 HTTPS 以获得最佳安全性。至少,如果您不能使用 HTTPS 协议,请使用摘要身份验证 (What is digest authentication?)

【讨论】:

    【解决方案3】:

    没有 HTTPS 没关系在客户端做这样的事情,因为它们会混淆你的代码,无论如何都会看到你的加密算法。

    【讨论】:

    • 我确实使用 HTTPS,但您认为我不应该在发送之前进行哈希处理吗?这样安全吗?
    • 如果算法在客户端,任何人都可以看到,所以尝试客户端加密是没有用的。
    • 由于您必须使用密钥,它会以某种方式存储在客户端,这意味着您将一切都交给了他们。只需使用表单发布并将其保存在您的 SSL 通道中,顺便说一下,您绝对应该在数据库访问期间使用加密。
    • 感谢您的提示!
    • 对于散列和加密的工作原理有很多误解。当然,您不会使用对称密钥进行加密。您可以使用非对称技术,其中加密数据的发件人只有公钥,只有服务器及其私钥,然后查看加密的内容。或者你,甚至更简单的散列方法,使用盐(或随机数)意味着攻击者可能会看到散列值但不能从中重新创建原始密码(这就是散列的含义),也不能重用如果服务器发送随机数(谷歌),则使用相同的哈希
    猜你喜欢
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2021-06-04
    • 2019-07-17
    • 2015-12-24
    • 2014-09-26
    • 2021-05-19
    • 2019-07-03
    相关资源
    最近更新 更多