安全密码重置而不发送电子邮件

时间:2009-07-22 02:48:27

标签: php security passwords

如何在不向用户发送电子邮件的情况下实施安全密码重置功能?我存储了另一个安全信息,只有用户应该知道,但让用户更新密码似乎不安全只是因为他们知道一个9位数字。

请注意,由于我正在处理的服务器上的真实数据库用户的限制,用户数据存储在一个简单的SQL表中。

任何意见都会受到赞赏。

更新
在尝试OpenID并记住此服务器不允许PHP(因此,cURL)发出任何外部请求后,我尝试再次使用PHP发送邮件。显然我之前在这台服务器上使用mail()的所有可怕经历已经消失。

感谢您的所有输入,我将来可能会再次查看OpenID。

4 个答案:

答案 0 :(得分:2)

解决密码问题。切换到OpenID。您不必担心密码重置,并且用户只需要一个新密码。

这是双赢的。

答案 1 :(得分:1)

通常,在互联网上将用户识别为真实需要“选择加入”模式,其中用户“选择”重置密码,并发送电子邮件确认他们要么重置密码,要么具有已重置以及新的重置密码是什么。

实际上,唯一合理安全的替代品是使用类似方法的替代品。发送电子邮件,短信,他们必须回复,自动拨打电话,他们必须打数字等等。

我能想到的唯一不使用此系统的方法是安全问题。当用户登录或无法正确登录多次时,银行通常会使用这些进行额外验证。它们有时也被用作检索密码的“秘密”代码,但即使这样,它通常也会通过电子邮件发送给用户,而不会显示在页面上。

答案 2 :(得分:0)

如果不发送电子邮件,则会严重限制自己。将密码重置代码或新密码发送到某人的电子邮件地址的好处之一是,您可以依赖于他们是唯一可以访问其电子邮件帐户的人。

也就是说,您可以使用“秘密问题”方案来允许某人重置密码。当此人创建他们的帐户时,您需要捕获他们的秘密问题和答案。然后,您将提示用户提出此问题,并且只有在他们正确回答时才允许重置。

我必须警告您,这不是保护密码免受未经授权访问的好方法。如需一篇好文章,请阅读:http://www.schneier.com/blog/archives/2005/02/the_curse_of_th.html

答案 3 :(得分:0)

您无法知道谁在尝试重置“Joe”的密码。它可能是乔,或者可能是冒充乔的人。

发送电子邮件的另一种方法是使用一次性重置密钥拨打Joe的一部电话或发送短信。

使用http://www.twilio.com/可以轻松地使用音频消息拨打Joe的电话但是任何人都可以拿起Joe的办公室电话。所以通常在打电话之前你还需要一个额外的挑战。例如一个秘密的问题/答案。通过使用手机秘密q& a,你已经让坏人变得更加艰难,但乔仍然可以做到。

另一个想法是将重置消息发送给Joe信任并且知道Joe的人。 (通过电子邮件或电话/短信发送。)此类型的变体是发送给知道Joe的员工,例如他指定的salesrep,HR rep等。

使用帖子:发送带有重置代码的蜗牛邮件信件。可能需要几天才能到达那里,但邮件被盗是联邦说唱。见http://www.postalmethods.com/如果可能出现非常糟糕的负面结果,这可能是一个很好的解决方案。

对于上述任何一项,Joe会在设置帐户时输入信息。

另一种模式是要求乔打电话到服务台,让人来询问他。

底线是没有技术是完美的。查看twitter breakin故事:http://www.technewsworld.com/story/67612.html?wlc=1247790901&wlc=1248238327

最后想到:不要忘记反网络钓鱼。通常通过让乔选择一个图片,该网站将在做重要事情时向他展示。这个想法是网络钓鱼网站将无法复制用户界面,从而使乔怀疑他可能没有到达正确的网站。