重置ASP.NET密码 - 安全问题?

key*_*rdP 8 asp.net security asp.net-membership forgot-password password-recovery

我已经看到有关这个问题的各种问题,但有几个问题没有被问到.如果用户忘记了密码,我希望他们能够仅使用他们的电子邮件地址重置密码(即没有安全问题/答案).密码存储为salted哈希,因此无法恢复.相反,我只是希望用户在确认他们已请求重置后输入新密码.

一个常见的方法是简单地说:

1)创建一个随机的Guid/Cryptographically强随机数

2)将包含随机数的唯一URL发送到用户的电子邮件地址

3)确认后,要求用户更改密码

但是,这不是开放的MITM攻击吗?如果通过互联网向电子邮件发送临时密码是不安全的,那么这样做与仅发送攻击者可以导航到的唯一URL之间的区别是什么?我是否错过了一个可以使这个系统更安全的关键步骤(或者是否有更好的方法来重置密码)?

谢谢

Joe*_*ton 9

如果正确构造哈希,则网址单击必须来自请求重置的IP地址.这将要求MITM欺骗IP和/或伪造标头.虽然这是可能的,但是您可以识别出有问题的系统的散列越独特,就越难以"结束"散列.

还建议guid是某些标准的单向散列.还可以使用私钥解锁的公钥来加密请求中的系统数据,以便在单击URL时,必须在哈希处附带相同的公共加密系统数据,并且唯一可以解密这些值的系统将是在服务器上保存的私钥.基本上是对hash的psuedo-PKI附件.

  • 关于知识产权问题,这部分肯定不相关吗?作为攻击者,我会声称自己忘记了密码,因此密码重置请求来自我的(攻击者)PC.执行MITM攻击,我会拦截电子邮件,点击链接并更改密码,因为它一直看到我的IP地址. (2认同)
  • 查看此站点以获取可用于识别浏览器的其他数据:http://panopticlick.eff.org/ (2认同)

Ano*_*on. 7

您对用户进行身份验证的方法是共享密钥(密码).

如果用户忘记了该秘密,则需要一种建立新共享密钥的方法.无论你采取何种方式,你仍然会遇到验证用户身份以分享新秘密的问题.

如果您了解用户可以用来验证他们的唯一信息是他们的电子邮件地址,那么您需要一些方法来确认请求重置的用户是否控制该电子邮件地址.

到目前为止,唯一的方法是通过电子邮件将密码发送到该电子邮件地址,并检查他们是否收到了该密码.

对于一个充满鬼鬼祟祟的MitM攻击总是会开放的.

您不发送临时密码的原因是为了避免"用户无法进行更改,因此继续使用不安全的临时密码而不是自己的安全密码".