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

提到的一种常见方法很简单:

1)创建一个随机Guid/加密强随机数

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

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

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

谢谢

有帮助吗?

解决方案

如果你正确地构建您的哈希值,点击该网址将有来自请求该复位的IP地址。这就要求MITM欺骗的IP和/或伪造头。虽然这是可能的,比较独特的,你可以识别哈希到系统中的问题,就越难以变得“最终围绕”哈希值。

此外,还建议该GUID是某些标准的单向哈希。它也可以使用公钥请求加密系统数据,一个私有密钥解锁,这样点击网址时,同样的公共加密系统的数据必须陪乱码,可能的解密方法,这些值是唯一的系统在服务器上保存私钥。基本上是一个伪PKI附着到散列。

其他提示

您验证用户的装置是一共享秘密(密码)。

如果用户忘记的秘密,你需要建立一个新的共享秘密的方式。不管你去做什么办法,你还是得为了验证用户分享一个新的秘密的问题。

如果您知道这可以用来验证他们的用户的唯一的事情就是他们的电子邮件地址,那么你就需要一些方法来确认请求重置用户在该电子邮件地址的控制。

和唯一的办法,到目前为止做到这一点是一个秘密的电子邮件到该电子邮件地址,并检查他们是否收到了。

这就是总是将是开放到足够偷偷摸摸的MITM攻击。

您不发送的临时密码的原因是为了避免问题“用户也懒得改变,因此保持使用不安全的临时密码,而不是他们自己的安全的。”

为了降低中间人攻击的风险,我使用以下措施:

  • 重置请求只能使用一次。
  • 如果未使用重置请求,它将在一小时后过期。
  • 所有重置请求都会被永久记录,无论其最终完成还是过期。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top