0

我正在为我的单页应用程序创建新的登录系统。该系统将要求管理员为用户创建帐户。一旦他们为用户设置了帐户,我将向他们发送一封电子邮件,他们必须在其中输入他们的信息,例如安全问题和密码。所以我做了一些研究并查看了我们现有的系统。有hash与 一起使用的功能salt。我读了几篇文章,关于哈希易受攻击有很多争论。我还看到,在这种情况下,散列密码和盐一样被存储。它们位于不同的列中。这是将盐存储在数据库中的好习惯吗?还有更好的方法将密码存储在数据库中吗?这是我发现的逻辑示例:

<cfset password = trim(FORM.password)>
<cfset salt = randomSalt()> //This is function that generates random salt.
<cfset totPW = password & salt>
<cfset hashedPW = hash(totPW,"SHA-256")>

我目前正在使用 Cold Fusion 2016。我不确定是否有更好的方法来加密 CF 中的密码。如果有人可以提供一些有用的资源或示例,请告诉我。谢谢。

4

1 回答 1

4

一般来说,这些天散列仍然很好。这里重要的是您使用的散列算法(以及迭代次数)。在数据库泄漏的情况下,您希望尽可能难以匹配输入(基于通用密码/字典的攻击)。加盐确实有一点帮助,因此具有不规则模式的盐或基于用户名的隐藏迭代次数等。只要攻击者不知道您的散列是如何实现的,拥有不同的散列策略就会有所帮助。(访问数据库服务器是一回事,访问您的源代码是另一回事。)这是为了让攻击者付出努力。

现在关于散列算法:SHA-2 比 bcrypt 更容易攻击,因为它可以被 GPU 锁定。哈希上的迭代次数将使攻击者花费更多时间来处理每个密码。不支持 bcrypt hash(),但至少 SHA-512 支持。hash()支持迭代(参见文档)。经验法则是在您的服务器硬件上处理至少需要一秒钟的迭代计数。

附带说明:不要修剪密码输入,人们可能打算使用前导/尾随空格。

于 2018-02-16T21:40:35.260 回答