码农家园

关闭
导航

关于安全性:通过电子邮件临时密码重置密码


forgot-passwordloginpasswordssecurity

Password reset by emailing temporary passwords

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

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

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

是否有任何重要的安全原因使一种方法优于另一种方法?还有其他更安全的方法吗?


Are there any significant security reasons to prefer one method over the other?

号

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

相关讨论

  • 用户不能也忽略临时密码邮件吗?或者您认为临时密码路由也锁定了用户?
  • 如果发出新密码,旧的有效密码将无效。
  • 是的,我用"临时密码"来表示"您的旧密码现在无效,这是新密码。"
  • 我从来没有遇到过这样的实现。我所见过的每一个忘记密码的实现都会发送一个临时密码,并将其存储在一个单独的数据库字段中,以避免出现这种糟糕的情况。
  • 十秒钟的谷歌搜索就产生了这个例子:advisioning.org/access/forgotten password.aspx"如果你忘记了密码,我们会把你的密码设置为临时密码,然后把你的临时密码发电子邮件给你。"听起来像我所描述的。
  • 这里有一个查询,它返回了更多像我描述的那样说他们这样做的网站:google.com/search?Q="重置+至+A+临时+密码"
  • 它实际上并没有说旧密码现在无效。我不是说没有一个网站能做到这一点,但在数据库中只需要第二个临时密码和一个日期字段就可以知道它何时过期,这并不难。


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

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

相关讨论

  • 检测到某人使用临时密码并强制他们在继续之前更改密码,这是非常简单的。


对于普通大众来说,没有更好的方法。如果这是一个内部应用,你可以想象发送加密电子邮件,用户必须用pgp解码,但这永远不会飞到外部用户,除非你有一个非常高价值,利基产品。

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

  • 可以猜测。像"最喜欢的颜色"这样的问题很容易被猜测出常见的选择,如"红"、"蓝"、"绿"等。
  • 可找到。很多都是来自facebook/myspace/twitter/flickr个人资料或其他googleable的东西。
  • 容易忘记。我选择了"最喜欢的度假胜地",然后一两年后就记不起我选了什么。
  • 很难分析。如果我输入"圣保罗"作为一个城市名称,但后来又返回"圣保罗",这会被接受吗?
相关讨论

  • 你能详细说明一下你的安全问题吗?
  • 安全问题可以问用户Facebook个人资料中已有的问题,也可以问用户不记得的问题。
  • 帕特里克一个接一个。它们通常是可以猜测的(为"最喜欢的颜色"选择红色、蓝色会让你在很大比例的帐户中找到)、可查找的(为某人的facebook/twitter/etc.profile使用谷歌)、或可遗忘的(最喜欢的度假地点可能会改变-现在我有两个忘记的密码!).


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

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


  • 关于安全:PHP密码的安全哈希和salt
  • 如何使用bcrypt在PHP中散列密码?
  • java:为什么密码首选char[]而不是String ?

Copyright ©  码农家园 联系:[email protected]