免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 998 | 回复: 0
打印 上一主题 下一主题

网站密码的恢复机制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-23 22:13 |只看该作者 |倒序浏览

相信上网者中大多数人都有多个密码,分别对应各个邮箱或者各种会员资格,这么多的密码如果忘了或者记混了也是很容易发生的。幸运的是,在大多数网站上都有密码恢复机制。这篇文章要讨论的问题就是如何设计一个比较合理的密码恢复机制,让密码恢复既方便又安全。  
密码恢复的一般流程  
通常来说,密码恢复的一般流程是(也许这也是许多人首先想到的流程):在用户登记的时候,让用户指定或者自己确定一个密码提示问题,并输入该问题的答案。如果用户有朝一日确实忘记了自己的密码,可以通过选择放置在页面首页上的“忘记密码”链接来调出自己预先设定好的密码提示问题,并输入问题答案,如果答案符合的话,系统就通过某种途径让用户得到密码。  
密码恢复的安全隐患  
看上去挺容易,其实这套流程如果设计得不好,很容易被不怀好意的人钻空子。设想一下这样一个设计得比较马虎的网站:如果要窃取某位同事在这个网站上的账号,只要选择“忘记密码”功能,看看系统怎么处理?系统的密码提示问题是“用户的生日”,太容易了,昨天才给这位同事过完生日,填入生日,点击“确定”,系统接受了正确答案,然后系统显示:“您的密码为xxxxxx ”。轻松搞定,怎么样?在丝毫没有惊动用户的情况下,轻而易举地得到了用户的密码!所以,如果设计得不好,窃取一个密码是很容易的。  
设计安全的密码恢复机制  
通过上面的示范,相信大家都能了解到设计一个安全的密码恢复机制的重要性了吧!接下来,我们针对上面的各个环节来进行讨论,通过科学的设计来堵住可能出现的漏洞。  
1. E-mail账号  
首先,让系统不显示用户的密码,而是将密码发送到用户注册时登记的E-mail账号。应该说,这是个好主意。对于攻击者来说,忙了半天,最后只是将密码发到用户注册的信箱里,其他什么都得不到。更重要的是,对于用户来说,这也是一个警告:有人希望通过某些不正当的途径得到您的密码,而且您的密码提示问题已经被攻击者猜到了。所以用户可以马上行动,改变自己的密码提示问题。  
一般情况下这确实是个不错的解决方案,不过如果用户注册的时候,我们没有强求用户必须输入一个合法的信箱,或者有些用户随手填了一个根本不存在的信箱(很多用户有这种习惯,比如笔者就是这样的),这样每次操作“忘记密码”后,系统都会向注册登记的邮箱发送密码信息,而不管这个邮箱是否存在。在这种情况下,事情就变得有些糟糕。不仅攻击者,而且用户本人也永远不能得到密码了。  
避免这种情况发生的惟一解决办法就是:在注册时要求用户留下真实的邮件地址,同时注册时要将验证信息发到该信箱中进行验证。虽然很麻烦,不过只有这样才能避免上述情况发生。  
2. 密码的提示问题  
密码的提示问题的设置很有讲究,设计得不好的密码提示问题根本就不能起到应有的作用。一般来说密码提示问题有这么几种设计方法:  
(1)由用户自己设定密码的提示问题,自己设定提示问题的答案。这种方法的自由度很高,用户可能会指定五花八门的提示问题和答案。不过不能防止有些用户设定过于简单的问题,比如“我生活在哪个城市?”如果攻击者了解用户的话,这个问题就太简单了。  
(2)由系统给出一些密码的提示问题,用户选择一个并设计答案。这是许多大网站所采用的方法,破绽也比较少,不过应该尽量避免选择上文所提及的容易被猜到答案的提示问题。  
(3)用户只设定密码提示问题,不指定答案。这种方法比较冷门,在某些港台的网站上有时能见到这种应用。准确地说,这里的密码提示问题并不是一个问题,只是一个密码提示(hint)。用户看到这个问题后就“应该”能回忆起自己的密码是什么,除此之外,系统什么也不做,也不发送任何密码给用户。从某种程度来说,这种设计具有很高的安全度,因为没有任何机会泄露密码。不过这种设计对用户的要求比较高,可能需要事先对用户说明密码提示和一般的密码提示问题的区别。  
恢复密码后的问题  
到此为止,也许大家对安全地进行密码恢复已经有了一个比较基本的认识,但是还有些问题要考虑。比如,如果我们要加大保密性,我们应该将用户的密码加密后再存入数据库,这种加密的算法从某种程度上说是不可逆的。也就是说,一般而言,我们是无从得知用户密码的“本来面目”的。如果我们像上文所提到的那样,将用户密码发送给用户的邮箱,我们拿什么发送?就算有大型计算机,我们可能也得花上几个星期才能算出用户的真实密码,显然这么做是不现实的。  
这样我们就面对着一个我们不得不接受的现实:如果我们使用加密算法来存储用户的密码,那么用户丢失或者遗忘了自己的密码,我们将不能够为他们恢复密码。我们所能做的,只有为用户重新设置一个随机密码,然后将该密码发送到用户的信箱中。  
现在看起来万无一失了,事实上不是。让我们看看现在攻击者能干什么,同样假设攻击者猜到了密码提示问题的答案,选择“恢复密码”,系统会将原来用户的密码删除,然后设置一个新的随机密码,并发送到用户的信箱中去。不错,攻击者没办法看到密码,但用户下次登录的时候将不得不用电子信箱中发来的新随机密码登录。  
如果攻击者高兴的话,一天来几次,每隔几天“骚扰”用户一次,用户会有何感想?可能一天到晚都要忙着收E-mail,用最新的密码登录了,看来这种方法还是有个小小的漏洞。要想彻底杜绝攻击者的这些无聊把戏,我们应该另想密码恢复方法。  
实用密码恢复方案  
在用户答对了密码提示问题之后,系统并不是马上清除用户的原始密码,而是发一个超链接到用户的E-mail信箱,该链接可能是这样一种形式:  
http://www.website.com/servlet/confirm_pwd_reset?id=7f893fkl42  
这里id是一个系统产生的随机数,并被系统记录在案。用户在E-mail中收到这个链接后,如果确信自己要得到新的密码的话,可以点击这个链接,系统在校验了id后面的随机数合法后,才会将用户的原始密码删除,并为用户设置一个新的随机密码。如果用户认为这次恢复密码操作不是自己操作的,也就是说可能是攻击者捣乱,用户只要忽略这封邮件,用户的原始密码并不会被改变。   


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17347/showart_175692.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP