我已经看到关于这个问题的各种问题,但有几个问题没有被问到。如果用户忘记了密码,我希望他们能够仅使用他们的电子邮件地址重置密码(即没有安全问题/答案)。密码存储为salted哈希,因此无法恢复。相反,我只是希望用户在确认他们已请求重置后输入新密码。
一个常见的方法是简单地说:
1)创建一个随机的Guid / Cryptographically强随机数
2)将包含随机数的唯一URL发送到用户的电子邮件 地址
3)确认后,要求用户更改密码
但是,MITM
攻击是否开放?如果通过互联网向电子邮件发送临时密码是不安全的,那么这样做与仅发送攻击者可以导航到的唯一URL之间的区别是什么?
我是否错过了一个可以使这个系统更安全的关键步骤(或者有更好的方法来重置密码)?
由于
答案 0 :(得分:9)
如果正确构造哈希,则网址单击必须来自请求重置的IP地址。这将要求MITM欺骗IP和/或伪造标头。虽然这是可能的,但是您可以识别出相关系统的哈希值越独特,就越难以“结束”哈希值。
还建议guid是某些标准的单向散列。还可以使用私钥解锁的公钥来加密请求中的系统数据,以便在单击URL时,必须在哈希处附带相同的公共加密系统数据,并且唯一可以解密这些值的系统将是在服务器上保存的私钥。基本上是对哈希的psuedo-PKI附件。
答案 1 :(得分:7)
您对用户进行身份验证的方式是共享密钥(密码)。
如果用户忘记了该秘密,则需要一种建立新共享密钥的方法。无论你采用何种方式,你仍然会遇到验证用户身份以分享新秘密的问题。
如果您对用户的唯一了解可能用于对其进行身份验证的是他们的电子邮件地址,那么您需要某种方法来确认请求重置的用户是否可以控制该电子邮件地址。
到目前为止,唯一的方法是通过电子邮件将密码发送到该电子邮件地址,并检查他们是否收到了该密码。
对于一个充满鬼鬼祟祟的MitM攻击总会持开放态度。
您不发送临时密码的原因是为了避免“用户无法进行更改,因此继续使用不安全的临时密码而不是自己的安全密码”。
答案 2 :(得分:1)
为了减轻中间人攻击的风险,我使用以下措施: