5

我的公司正在开发一个在线 HR 和薪资应用程序,其中安全访问至关重要。我很清楚如何锁定大多数身份验证/授权过程,但“忘记密码”页面除外。

我最初的计划是要求用户输入电子邮件地址和对先前选择/输入的挑战问题的回复,并将临时密码邮寄到列出的电子邮件(假设电子邮件有效)。但是我在这里这里(都在 SO 上)读到挑战-响应方法是不安全的。

但是,如果我们只是通过电子邮件发送临时密码,真的那么不安全吗?我能想到的唯一更安全的选择是要求用户致电他们的客户服务代表,这会给我们的员工带来很大负担。

我错过了什么......有更好的方法吗?谢谢!

4

6 回答 6

15

不要通过电子邮件发送临时密码,而是通过电子邮件向用户发送 URL+token 到重置密码页面。这样一来,任何密码都不会在未加密的情况下易手。如果最终用户尝试访问该页面并且重置令牌已被使用,那么最终用户也会立即发现他们的帐户已被盗用。

从评论中添加:

我认为挑战-响应(“秘密问题”)方面实际上使事情变得不那么安全,因为它们通常是可以通过研究有关目标的公共信息发现的事情。步骤总数越少,在无人知晓的情况下可以破解的越少。让重置电子邮件尽早发送通常是让人们知道正在尝试的好方法。

于 2009-03-05T05:01:58.973 回答
3

正如本文中所解释的,州长佩林的电子邮件帐户最近被黑客使用了对以前提出的问题的回答。来自文章:

正如帖子中所详述的,Palin hack 不需要任何真正的技能。取而代之的是,黑客只需使用佩林的出生日期、邮政编码和她在哪里认识她的配偶的信息——她雅虎帐户上的安全问题,通过简单的谷歌搜索就得到了答案(瓦西拉高)来重置佩林的密码。

于 2009-03-05T05:41:54.790 回答
1

有几种常见的方法来管理丢失的密码:

  • 秘密问题:它实际上是一种较弱的身份验证形式,就像上面发布的人一样。用户可以选择一些非常简单并且很容易猜到的东西。我不建议这样做,因为它不需要任何技术“黑客”

  • 邮寄新密码。要绕过此控制,需要访问电子邮件帐户或需要中间人 (MITM) 职位:您要么从用户的收件箱中读取临时密码,要么在中间拦截。这种方法很容易被滥用,因为任何人都可以重置密码并强制用户退出系统,如果他无法阅读新密码的电子邮件。

  • 邮寄密码重置哈希,为了避免这种情况,您需要访问收件箱或 MITM,就像在此之前的情况一样,但在确认完成之前实际上不会重置密码。因此,即使他没有阅读电子邮件,用户也不能被锁定在系统之外。将冷却计时器添加到每 8 小时重置一次,以防止您的系统淹没用户的收件箱。

  • 考虑一些带外通信,例如,在打印的合同中,写下 PIN。然后让用户使用已知电话号码致电您的帮助台(检查来电显示)并提供他的用户名和 PIN。

于 2009-03-07T20:50:06.340 回答
0

像 SO 那样外包整个密码管理并使用 OpenId 或类似的东西不是很容易/可行吗?当然,这会增加另一个依赖项,但是您可以将其与保存(和保护)密码的需要进行交换,并按照您的描述处理它们。

于 2009-03-05T05:44:47.873 回答
0

你说这是一个在线人力资源和工资单应用程序。您是否可以选择让用户表明他/她忘记了他/她的密码,并向人力资源代表或组织中的某些官员发送消息,他们可以确认身份,然后重设密码?

于 2009-03-05T14:06:30.257 回答
0

简而言之,挑战问题往往是最薄弱的环节。它们比密码更容易猜到,并且有效地充当密码的代理,因此它们实际上降低了安全性,而不是通过提供另一种实际上更容易破解的攻击向量来增强安全性。Web Application Hacker's Handbook提供了有关这方面的一些重要信息。

于 2010-08-04T15:09:48.783 回答