在恢复密码电子邮件中将md5密码用作令牌是多么不安全?

时间:2012-02-26 16:44:44

标签: php mysql md5

我在考虑发送一封邮件,其中包含md5密码作为令牌,并在显示恢复密码表单之前检查电子邮件+密码是否正确

1)用户输入邮件

2)如果邮件存在,请发送一封电子邮件,并附上密码作为令牌

3)当用户点击链接时:检查邮件和md5密码是否正确,如果是这样的话:

4)显示密码生成器表单

- 编辑 -

那么如果不向用户表添加任何列,怎么会更安全呢?

5 个答案:

答案 0 :(得分:5)

这至少在理论上是不安全的。参见例如md5 decoding. How they do it?MD5 security is fine?

但为什么这样做呢?以下内容会更安全,而且实施起来稍微困难一些:

  1. 生成随机密钥,例如123456789abc
  2. 将其存储在用户记录中
  3. 将密钥添加到网址lookup.php?key=123456789abc
  4. 当用户点击该网址时,请查找该密钥以找到正确的电子邮件地址。
  5. 操作完成后,删除密钥。
  6. 给钥匙一个生命周期,比如24小时,这样非法请求就会消失。

答案 1 :(得分:1)

我很确定,这不是一个好主意:如果这封邮件落入坏人手中,它会为攻击者提供针对MD5的离线向量 - 这意味着如果他比真实用户更快,它会给他密码

使用腌制和更加计算密集的过程。

答案 2 :(得分:1)

如果我理解正确,并且密码的MD5哈希仅发送到该电子邮件地址,那么我认为这并不危险......只有在电子邮件帐户遭到入侵时才会这样。

这不是最好的做法,但我认为“电子邮件受到破坏”的情况并不重要,因为几乎每种方法都“易受攻击”。

答案 3 :(得分:0)

您可以使用随机字符串代替md5密码。您只需要验证要求您重置密码的人也是电子邮件地址的所有者。

当您发送与密码相关的内容(如哈希)时,比您发出提示,您不需要给出。有一些表可以用来反转md5'hash,可以用来猜测密码。

随机字符串视为会话ID

答案 4 :(得分:0)

可能会更好至少使用其他东西的MD5,因为如果密码很弱,攻击者可以使用字典来发现密码。

正如其他人所说,最好避免这种情况,理想情况下生成一个随机令牌,将其存储在某个地方,并发送/验证它。