重置ASP.NET密码-安全问题?
我已经看到了关于这个问题的各种问题,但是有几个问题还没有被问到。如果用户忘记了密码,我希望他们能够只使用自己的电子邮件地址重置密码(即没有安全问题/答案)。密码被存储为咸哈希,因此无法恢复。相反,我只希望用户在确认请求重置后输入新密码 提到的一种常用方法是: 1) 创建随机Guid/加密强随机数 2) 向用户的电子邮件发送包含随机数的唯一URL 地址 3) 确认后,要求用户更改密码 然而,这难道不容易受到重置ASP.NET密码-安全问题?,asp.net,security,asp.net-membership,forgot-password,password-recovery,Asp.net,Security,Asp.net Membership,Forgot Password,Password Recovery,我已经看到了关于这个问题的各种问题,但是有几个问题还没有被问到。如果用户忘记了密码,我希望他们能够只使用自己的电子邮件地址重置密码(即没有安全问题/答案)。密码被存储为咸哈希,因此无法恢复。相反,我只希望用户在确认请求重置后输入新密码 提到的一种常用方法是: 1) 创建随机Guid/加密强随机数 2) 向用户的电子邮件发送包含随机数的唯一URL 地址 3) 确认后,要求用户更改密码 然而,这难道不容易受到MITM攻击吗?如果通过internet向电子邮件发送临时密码是不安全的,那么这样做与发送攻
MITM
攻击吗?如果通过internet向电子邮件发送临时密码是不安全的,那么这样做与发送攻击者可以导航到的唯一URL有什么区别?
我是否错过了使系统更安全的关键步骤(或者是否有更好的方法重置密码)
谢谢如果正确构建哈希,url单击必须来自请求重置的IP地址。这将要求MITM欺骗IP和/或伪造报头。虽然这是可能的,但您可以为相关系统标识的哈希越独特,就越难“结束”哈希
还建议guid是某些条件的单向散列。还可以使用私钥解锁的公钥对请求中的系统数据进行加密,以便在单击url时,该相同的公共加密系统数据必须伴随哈希,并且唯一可以对这些值进行解密的系统将是服务器上持有的私钥。基本上是散列的psuedo PKI附件。验证用户的方法是共享秘密(密码) 如果用户忘记了该秘密,您需要一种建立新共享秘密的方法。不管你怎么做,为了分享这个新秘密,你仍然会遇到验证用户身份的问题 如果您对用户的唯一了解是他们的电子邮件地址,那么您需要某种方法来确认请求重置的用户控制着该电子邮件地址 到目前为止,唯一的方法是通过电子邮件将一个秘密发送到该电子邮件地址,并检查他们是否收到了它 它总是会被一个足够狡猾的MitM攻击
不发送临时口令的原因是为了避免“用户不能随意更改,因此使用不安全的临时密码代替自己的安全密码”。
< p>为了减轻中间人攻击的风险,我使用以下措施:- 重置请求只能使用一次
- 如果未使用重置请求,则它将在一小时后过期
- 无论重置请求最终完成还是过期,都会永久记录所有重置请求