通过电子邮件发送临时密码重置密码

Posted

技术标签:

【中文标题】通过电子邮件发送临时密码重置密码【英文标题】:Password reset by emailing temporary passwords 【发布时间】:2010-11-21 08:56:52 【问题描述】:

我公司的一个小组正在为我们的应用程序实施单点登录 REST API。此认证服务具有密码重置功能。应用程序将用户名发送到重置函数。如果该用户名与电子邮件地址相关联,则会向该地址发送一封带有临时密码的电子邮件。

另一种方法似乎是通过电子邮件发送一个安全的临时链接的网站,该链接提供一个页面供用户输入新密码。此页面只存在很短的时间。

我知道电子邮件不是一种安全协议,因此人们可以嗅探流量并恢复临时密码或临时链接。

是否有任何重要的安全原因偏爱一种方法而不是另一种方法?还有其他更安全的方法吗?

【问题讨论】:

【参考方案1】:

在这两种情况下,私人信息(临时密码或重置链接)都是通过同一介质传输的。从这个角度来看,安全性没有区别。但是,重置链接有几个优点:您强制用户选择新密码。一旦他这样做,该链接就无效并且不能被滥用。相反,临时密码往往不像您喜欢的那样临时。即使你强制用户在下次登录时选择新密码,他也有可能再次输入临时密码。

此外,您可以记录使用重置链接的人的 IP,因此至少有一些东西可以在必要时移交给当局。

【讨论】:

检测到有人使用临时密码并强制他们在继续之前更改密码是相当简单的。【参考方案2】:

对于普通大众来说,真的没有更好的方法。如果它是一个内部应用程序,您可以想象发送用户必须使用 PGP 解码的加密电子邮件,但除非您拥有非常高价值的小众产品,否则这永远不会为外部用户提供服务。

如果电子邮件不可用,您将不得不使用诸如安全问题之类的东西,但它们有自己的(在我看来更重要的)问题。问题包括:

可以猜测。 “最喜欢的颜色”之类的问题很容易被猜到“红色”、“蓝色”、“绿色”等常见选择。 可找到。许多内容来自 Facebook/MySpace/Twitter/Flickr 个人资料或其他可在 Google 上搜索的内容。 难以忘怀。我选择了“最喜欢的度假胜地”,但一两年后就记不起我选择了什么。 难以解析。如果我输入“St. Paul”作为城市名称,但后来又输入“Saint Paul”,会被接受吗?

【讨论】:

您能否详细说明您的安全问题? 安全问题要么询问用户 Facebook 个人资料中已有的内容,要么询问用户不记得的内容。 Patrick 合二为一。它们通常是可以猜到的(选择红色、蓝色作为“最喜欢的颜色”会让您进入很大比例的帐户)、可找到(Google 用于某人的 Facebook/Twitter/等个人资料)或容易忘记(“最喜欢的度假胜地”可能会改变) - 现在我有两个忘记密码了!)。【参考方案3】:

有很多更安全的方法可以重置密码。所有这些都对您的用户非常不便并且维护成本很高。让每个用户向您发送 DNA 样本和指纹,然后要求他们亲自出现以进行验证,这应该有助于您的安全。我很惊讶您的绝密组织允许您获得有关 *** 的安全建议。除了开玩笑,您的应用程序需要有多安全?攻击者真的会重置您用户的密码然后访问他们的电子邮件吗?

XKCD 总是说得最好http://xkcd.com/538/

【讨论】:

【参考方案4】:

是否有任何重要的安全理由偏爱一种方法而不是另一种?

是的。如果您使用临时密码路线,那么任何人都可以通过不断点击重置链接并输入该用户的电子邮件地址来惹恼用户。如果您使用密码重置链接,用户可以忽略它们并删除电子邮件。

【讨论】:

用户不能也忽略临时密码电子邮件吗?还是您认为临时密码路由也锁定了用户? 我希望如果发送新密码,旧的有效密码将失效。 是的,我认为“临时密码”是指“您的旧密码现在无效,这是一个新密码。” 我从来没有,曾经遇到过这样的实现。我见过的每一个忘记密码的实现都会发送一个临时密码,将其存储在一个单独的数据库字段中,以避免这种令人讨厌的情况。 十秒钟的谷歌搜索得出了这个例子:counseling.org/Access/ForgottenPassword.aspx“如果您忘记了密码,我们会将您的密码设置为临时密码,并将您的临时密码通过电子邮件发送给您。”听起来像我描述的那样。

以上是关于通过电子邮件发送临时密码重置密码的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 5 中的队列通过电子邮件发送密码重置链接

Laravel 5 重置密码通知不会发送

通过邮件找回密码

Firebase Auth 密码重置:如何正确发送包含确认码的密码重置电子邮件?

使用设计发送重置密码说明

Laravel 5 密码重置电子邮件未发送