存储秘密Q& A - 哈希或纯文本。

时间:2010-12-24 21:15:51

标签: php database authentication

我的密码使用sha512,但秘密问题和答案都是纯文本。问题是:我需要散列秘密答案吗?如果是这样的数据类型,它仍然是char(128)?我认为秘密问题必须是纯文本吗?

3 个答案:

答案 0 :(得分:5)

只是摆脱秘密问题,他们是毫无意义的措施:

  1. 他们没有增加安全性,他们实际上减少了它们,因为它很容易找到答案,特别是因为,正如你所说,围绕谁会使用“你最喜欢的宠物是什么?”会有愚蠢的用法。作为一个“秘密”问题。
  2. 他们可能会感到沮丧,因为您在尝试恢复密码时可能会略微区别(或大写/小写)。
  3. 如果您的密码被哈希,您无法将密码返回给用户,您必须向他/她发送一封带有新密码或更改链接的电子邮件,那么为什么不让用户首先输入他的电子邮件地址?
  4. 这只是填写注册时的另一个额外字段。已经太多了......

答案 1 :(得分:3)

你也不应该哈希。如果用户想通过问题/答案重置密码,则应发送一封包含相关链接的电子邮件。如果攻击者设法得到问题/答案,除非他们已经访问了用户的电子邮件,否则它仍然无法帮助他们,这意味着所有的赌注已经相当多了。如果你愿意,你可以散列答案,并且它们将以与密码相同的方式存储,因为它们以相同的格式结束。

但有一个问题是,用户输入自己的问题还是从列表中选择?如果从列表中,为什么不使用一个标识符来使用哪个问题,并将潜在问题放在另一个表中或硬编码到脚本中?

答案 2 :(得分:1)

这是一篇很老的帖子,但我想对nico的答案添加一些想法(我太新了,无法添加评论)。当用户不再能够访问他们注册的电子邮件地址时(经常发生),安全问题非常有用。您需要一些其他方式来识别它们,否则它们将永远无法返回到他们的帐户。

您可以通过规范化输入(小写,修剪前导/尾随空格等)来降低错误输入的风险。

回到OP,如果你仍然使用它们,哈希它们的一个原因恰好是尼科的第二点 - 如果答案是“圣云”并且人物类型为“St Cloud”,写得不好的系统可能会拒绝重置。但是如果答案没有经过哈希处理,管理员会发现答案显然是正确的。如果答案被散列,则无法知道用户是否接近。