11

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

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

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

是否有任何重要的安全原因偏爱一种方法而不是另一种方法?有没有另一种更安全的方法来做到这一点?

4

4 回答 4

10

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

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

于 2009-08-20T15:29:46.983 回答
9

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

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

于 2009-08-20T16:00:57.590 回答
4

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

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

  • 可以猜测的。诸如“最喜欢的颜色”之类的问题很容易猜测诸如“红色”、“蓝色”、“绿色”等常见选择。
  • 可找到。许多东西都来自 Facebook/MySpace/Twitter/Flickr 个人资料或其他 Googleable。
  • 容易忘记的。我选择了“最喜欢的度假胜地”,然后一两年后就记不起我选择了什么。
  • 难以解析。如果我输入“St. Paul”作为城市名称,但后来又输入“Saint Paul”,会被接受吗?
于 2009-08-20T15:30:11.117 回答
0

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

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

于 2009-08-20T15:59:45.627 回答