什么更安全?我是否应该向用户发送包含过期URL的电子邮件以重置密码,还是应该通过电子邮件发送新生成的密码?

Mar*_*eld 24 security passwords reset-password

当用户忘记密码时,我想知道什么是更安全的选择

  • 将随机生成的新密码发送到电子邮件地址(我的数据库中的所有电子邮件地址都已确认可用).

要么

  • 发送一封电子邮件,其中包含在特定时间范围内过期的链接,用户可以在该时间范围内重置密码.

除了后者使用额外的桌子之外,您认为更安全/更好的做法是什么?

Pas*_*TIN 21

如果您发送包含密码的电子邮件,则表示:

  • 密码将通过某些网络(未加密)并可能被"看到"
  • 密码将保留在用户的邮箱中
    • 哪个可以被黑客入侵
    • 任何有权访问计算机的人都可以看看

因此,在电子邮件中发送密码似乎并不安全......


作为用户,我觉得我的密码"更安全",包含某种令牌的链接会在一段时间后过期.

" 一段时间后过期 "部分很重要,顺便说一下:它确保如果有人在一段时间后点击链接(例如,访问用户邮箱的人),该链接将不会用于生成新密码.


当然,这意味着我不能只是" 在我的邮箱中搜索 "来找到密码 - 但我总是可以要求一个新的我再次忘记它^^

  • 或者您可以向用户发送过期的临时密码.用户使用临时密码登录后,会立即提示他们进行更改. (5认同)
  • 咦?使临时密码过期使其与链接一样安全,因此您选择哪一个没有区别. (5认同)
  • 随机密码,而不是用户的原始密码(绝不应以可检索的形式存储).在这种情况下,链接与密码一样好. (2认同)
  • 在完成原始请求时也更改密码意味着用户无法再使用原始密码登录.那是一个简单的(临时的)DOS攻击,因为我可以点击"忘记密码",用你的用户名按钮,只要你不检查你的邮件就不能再登录了. (2认同)

cee*_*yoz 10

相当困惑的是这里的其他答案.他们完全一样.两者都允许访问用户的帐户,两者都以纯文本形式发送,并且两者都是常用的.选择你喜欢的任何一个.

使用链接/密码后立即更改密码,并在24-72小时后使链接/密码过期.

  • 我有一个小时或更长时间的电子邮件显示在某些发件人的收件箱中. (2认同)

bob*_*nce 8

发送一封电子邮件,其中包含在特定时间范围内过期的链接,用户可以在该时间范围内重置密码.

那一个,当然.

电子邮件始终处于清晰状态(可能您的站点连接可能不是),并且可以触摸更多计算机.将密码保留在电子邮件之外.临时重置令牌还意味着如果邮箱稍后被黑客入侵,则该令牌将不再使用.

除了后者使用额外的桌子,

它不必.您可以生成加密令牌,授权特定用户在特定时间范围内重置密码; 无需额外数据.

使用基于HMAC的消息验证代码(花式散列)的示例:

details= user_id+' '+token_expiry_timestamp
mac= hmac_sha2(server_secret, details)
token= details+' '+mac
Run Code Online (Sandbox Code Playgroud)

然后将其token作为邮件中可点击URL的一部分发送给用户.当您收到回拨时,请mac确定该用户应该使用服务器端密码的时间和时间,并针对传入的mac进行检查.如果匹配,则必须是您之前签署的密码请求.

user_id, token_expiry_timestamp, mac= token split on ' '
details= user_id+' '+token_expiry_timestamp
if hmac_sha2(server_secret, details)!=mac
    complain
else if token_expiry_timestamp<now
    complain
else
    allow password for user_id to be changed
Run Code Online (Sandbox Code Playgroud)

这不需要任何状态,但您应该使用较短的过期时间,因为如果您不记录使用情况,则可以多次使用令牌.

  • 好的,但这样做你无法在密码请求中将*actual*密码更改为随机,因为这将是一个明显的DoS问题.您必须拥有两个密码,这些密码最终与拥有单独的重置令牌没有太大区别. (5认同)

Lat*_*per 7

人们似乎忽略的一个区别是 - 以某个Web应用程序为例 - 密码重置选项通常对访问某个站点的任何人都是开放的,并且知道他们想要重置密码的帐户的用户名/登录名.

通过在用户必须单击的电子邮件中发送链接以便能够重置其密码,您可以避免让用户意外或恶意地重置其他人的密码 - 所有这些都会发生,因为他们收到的电子邮件结尾,"如果您没有要求重置密码,请忽略此电子邮件."

即使它本身并不存在安全风险,但在没有确认的情况下重置密码可能是一个很大的麻烦.