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

11

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

另一种方法似乎是向用户发送一个安全的临时链接,该链接呈现一个页面供用户输入新密码。此页面仅存在短时间。

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

是否有任何重要的安全原因来优先考虑其中一种方法?是否有另一种更安全的方法来做到这一点?

4个回答

10

在这两种情况下,私人信息(临时密码或重置链接)都通过相同的媒介传输。从这个角度来看,安全性没有区别。然而,重置链接有一些优点:您可以强迫用户选择一个新密码。一旦他这样做了,链接就无效,不能被滥用。相反,临时密码往往不像您希望的那样临时。即使您强制用户在下次登录时选择新密码,他可能仍会再次使用临时密码。

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


2
很容易检测到有人使用临时密码,并强制要求他们在继续之前更改密码。 - ceejayoz

9

两种方法中是否有重要的安全原因可以使一种方法优于另一种?

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


用户不能忽略临时密码邮件吗?或者您是想通过临时密码路线锁定用户? - Patrick
1
如果新密码被发送出去,我希望旧的有效密码将无效。 - Nifle
1
我从来没有遇到过这样的实现方式。我见过的每一个忘记密码的临时密码发送实现都会将其存储在一个单独的数据库字段中,以避免出现这种恶劣情况。 - ceejayoz
它实际上并没有说旧密码现在无效了。我不是说没有这样的网站,但是只需在数据库中有第二个临时密码和一个指示其过期时间的日期字段就不是很难了。 - Peter
显示剩余2条评论

4

对于普通公众来说,没有更好的方法。如果是内部应用程序,你可以考虑发送加密电子邮件,用户必须使用 PGP 解码,但除非你拥有一个非常高价值的利基产品,否则这种方法不适用于外部用户。

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

  • 可猜测。例如,“最喜欢的颜色”等问题相当容易被猜出常见的选择,如“红色”,“蓝色”,“绿色”等。
  • 可找到。许多问题都可以从 Facebook/MySpace/Twitter/Flickr 等个人资料或其他可搜索的来源中获取。
  • 易忘。例如,我曾选择过“最喜欢的度假胜地”,但几年后无法记起我选择了什么。
  • 难以分析。例如,如果我输入了一个城市名“圣保罗”,但稍后又用了“St. Paul”,它会被接受吗?

你能详细说明一下你在安全问题方面遇到的问题吗? - andrewWinn
3
安全问题要么询问用户在其Facebook个人资料中已经提供的信息,要么询问用户无法记住的信息。 - Patrick
帕特里克一下就懂了。它们通常是可猜测的(选择红色、蓝色作为“最喜欢的颜色”可以获得账户的很高比例),容易找到(在谷歌上搜索某人的Facebook/Twitter等个人资料),或者被遗忘(“最喜欢的度假胜地”可能会改变,现在我有两个忘记的密码!)。 - ceejayoz

0

有很多更安全的方法可以重置密码。所有这些方法都对用户非常不方便,而且维护成本也很高。让每个用户向您发送DNA样本和指纹,然后要求他们亲自出席进行验证,应该有助于提高安全性。我很惊讶您的顶级机构允许您在stackoverflow上获取安全建议。开玩笑的,你的应用程序需要多安全?攻击者真的会重置用户的密码,然后访问他们的电子邮件吗?

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接