代码之家  ›  专栏  ›  技术社区  ›  keyboardP

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

  •  8
  • keyboardP  · 技术社区  · 15 年前

    我看到过关于这个问题的各种问题,但还有一些问题没有被问到。如果用户忘记了他们的密码,我希望他们能够重置它只与他们的电子邮件地址(即没有安全问题/答案)。密码存储为盐散列,因此无法恢复。相反,我希望用户在确认他们请求重置后输入一个新密码。

    所提到的一种常见方法是:

    1)创建随机的guid/加密强随机数

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

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

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

    谢谢

    3 回复  |  直到 15 年前
        1
  •  9
  •   Joel Etherton    15 年前

    如果您正确构造了散列,则URL单击必须来自请求重置的IP地址。这将需要MITM欺骗IP和/或伪造头。虽然这是可能的,但是越是独特的您可以识别哈希到相关的系统,就越难“结束”哈希。

    还建议guid是特定条件的单向哈希。也可以使用私钥解锁的公钥对请求中的系统数据进行加密,以便在单击URL时,哈希必须附带相同的公共加密系统数据,唯一可以对这些值进行解密的系统将是服务器上的私钥。基本上是对哈希的psuedo-pki附件。

        2
  •  7
  •   Anon.    15 年前

    验证用户身份的方法是共享的秘密(密码)。

    如果用户忘记了这个秘密,您需要一种建立新的共享秘密的方法。不管你怎么做,为了分享这个新的秘密,你仍然需要对用户进行身份验证。

    如果您知道的关于用户的唯一信息是他们的电子邮件地址,那么您需要某种方式来确认请求重置的用户控制了该电子邮件地址。

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

    它总是会对一个足够的偷偷摸摸的MITM攻击开放。

    不发送临时密码的原因是为了避免“用户不必担心更改,因此继续使用不安全的临时密码而不是他们自己的安全密码”。

        3
  •  1
  •   Nick Higgs    15 年前

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

    • 重置请求只能使用一次。
    • 如果不使用重置请求,它将在一小时后过期。
    • 无论最终完成还是过期,所有重置请求都将被永久记录。
    推荐文章