“忘记密码”:不吐不快的纠缠
很少有人未曾忘记过任何一个密码,至少我没见过——尤其是在互联网“账户爆炸”的现状之下。
“找回密码”这一个天才的发明,给了我们的账户免却“浮云”的机会。
但是直到现在,密码恢复机制的运行方式,仍然没有形成统一的共识。许多不良的设计,轻则给找回密码造成障碍,重则造成冒领密码的悲剧。
我因为密码的问题丢失的各种账户多达两位数,彻底受够了,所以想说说自己对密码恢复机制的期待。未必系统,但确实不吐不快。
通篇反例,几乎没有正面叙述。因为我认为,能够躲开绝大多数的反例,就不是一个差的设计。
密码提示问题:漏洞百出的经典方案
大多数的注册界面提供“密码提示问题”和“安全答案”的选项。

图:Gmail的密码提示问题界面
这是一种经典设计,但之所以说是漏洞百出,不是设计的初衷不好,而是在实际应用中最容易走样。
可以轻易猜出的“安全”问题
随便拿了个门户举例子。

图:搜狐的备选安全提问
以上的备选问题都并不具有“保密”的特性。比如说“幼儿园名称”、“小学名称”就可以轻易调查,而父母的生日也并不是绝对安全。尤其对于现实中认识的人,这些问题更容易攻破。
设定这样的问题,“安全”在哪里?我不知道有没有人能看到。
根本没有答案的“问题”
换一个例子。

图:网易的备选安全提问
“最爱的电影”、“最喜欢的休闲运动”,会产生不唯一的答案,比如今天喜欢台球,明天喜欢轮滑什么的。
而致命之处就在于,这样的问题注册的时候记忆深刻,但过几天肯定忘掉。在真正用得着的时候,一般是想不起来的。
所以没有概念、没有约束,或者是过分强调个人喜好的密码提示问题,只要确定不了唯一的答案,都是无意义的。
不统一的格式标准
仍然用上面的例子。
例如涉及日期的项目,可能会产生多种格式,例如“1989年10月2日”、“1989-10-2”、“2/10/1989”等等。还有书名是否加书名号“《》”;学校名称用全称还是简写等等。
这样的问题虽然可能有唯一答案,但日后回答时,很可能对不上注册时设定的格式。要知道我们的计算机只会呆板的逐字判断。
所以,答案唯一但是格式多样的问题,仍然没有意义。
不切实际的长度要求

图:网易对安全答案长度的要求
回顾网易的安全提问,有一些答案如果如实回答,就不能保证达到长度的要求:
- 休闲运动 - 轮滑
- 运动员 - 刘翔
- 喜爱物品 - 电脑
- 食物 - 牛排
- 电影 - 夜宴
- 最爱的人 - 任何两个汉字的姓名
- ……
对于安全答案来说,只要私密,即使是短些也不会被猜到。至于生拼硬凑的长度要求,并没有什么实际的意义,只会阻碍用户的使用。
自定义问题:有风险的设计
很多网站允许用户自己提问。这种方式可以避免固定问题的条条框框,让用户的答案更难被猜出。
但是,很多用户没能正确理解密码提示问题的作用,设计了许多能轻易猜到的问题。例如“我QQ号多少”之类。这样的自定义,毫无安全可言,甚至不如给定问题。
所以,如果允许用户自定义问题,必须要向用户讲明密码提示问题的意义。虽然让用户对自己的安全问题“责任自负”是必须的,但作为网站设计者,也必须向用户解释清楚,而不能只为了图省事就“不负责任”。
正确的做法?
密码提示问题是恢复密码的手段,而绝不是第二密码。密码提示问题的铁律,就是任何时候都绝对不造成用户一星半点的记忆负担,任何时候都不往用户本来就不清晰的记忆上加码。
安全答案必须隐秘,用户知道但别人不知道,保证密码不被冒领。
安全答案必须真实,这样“密码提示问题”才能起到提示的作用,真正“点醒用户内心深处的记忆”,保证真正的用户能取回密码。
所以在注册界面,应该向用户明确讲解安全答案的隐秘性和真实性,并且不应该鼓励用户选择“答非所问”的方式。
对于格式多样的问题,必须要明确作出限制,例如提问日期,就要明确给出[ ]年[ ]月[ ]日3个文本框,并且只准填写数字,只接受真实存在的日期。
最后,无论如何设计,考虑到不可能100%的用户都理解密码提示问题的机制,密码提示问题在实际运行中总是不好控制的。所以,密码提示问题应该作为一种恢复密码的可选方式,而不是强制的要求。
提问“问题”的愚蠢设计
CSDN在恢复密码时,不仅要求答案,还要求输入自己设定的问题。
而CSDN的注册界面,要求用户自行输入问题和答案。

图:CSDN注册时对密码提示问题的要求
在所有的密码提示问题的设计中,CSDN做了最愚蠢的选择。因为用户在恢复密码时不会得到任何提示,自然也不会想起自己填写注册单时的状况。
CSDN相当于给用户连续套上了3个密码:密码、问题、答案,将无尽的记忆负担不负责任的塞给了用户。
并且,这种设计加剧了不同格式、不同表达方式引起的二义性。比如说设定的问题是“我最喜欢的人是哪位?”,回答时就很有可能写成“我最爱的人是谁?”,从而无法通过计算机逐字逐句的判定。
所以这样的设计,根本无法使用,实际上与封杀无异。
我没有在这个世界上见过更愚蠢的设计。CSDN这个前无古人的恶劣创举,有资格在这里排头一号。
话说回来,CSDN加强安全,保证用户的密码不被冒领的用意是好的。但是CSDN有必要用更认真的方式解决问题,而不应该只从自己的编程方便出发,给用户一个费心费力,乃至于无法使用的蹩脚方案。
这样的做法,我没看出网站设计者担负了任何的责任。如果一个网站到处都用这样敷衍的态度设计,我认为是不值得使用的。当然不是说CSDN都不好,但至少在这里,CSDN网站的设计者开了个恶劣先例。
邮件恢复:绝大多数情况的首选
已经有很多网站放弃了安全问题机制,改用电子邮件作为恢复密码的手段。

图:WordPress.com通过发送邮件恢复密码
大多数情况下,邮件恢复密码是安全而有效的,没有很多乱七八糟的问题。
认证与确认的“准绳”
邮件恢复密码原则在于确认:
- 拥有正确的邮件地址
- 用户本人申请了密码恢复
注意,有的网站设计者会想当然的认为“密码恢复自然是本人要求的”,这个想法很危险,因为这样就忽略了攻击者和骚扰者的存在。
哪个网站忘了,它在每一次请求密码恢复时都会直接给用户发送一个新的密码。这样,如果想要让用户无法登录,只要反复请求恢复密码就可以了。因为虽然账户不会丢失,但密码可以随时被改来改去。
所以无论以什么方式修改密码,邮件中一定要有一个临时链接,用来确认的确是本人要求恢复密码,而不是无聊的恶作剧。同样基于这一点,为了不影响用户的正常使用,在没有做出反应的时候,密码必须保持原状。
丢件与地址失效的问题
首先电子邮件地址本身也是一个账户,用户自身也担负着电子邮件账户丢失、电子邮件被窃取的风险。
其次,不能想当然认为电子邮件就能可靠寄达。我在2003年做的测试,使用连接ADSL宽带的普通电脑,安装SMTP服务器给各个邮件服务商发信。结果发现新浪和雅虎对这样的“山寨”服务器不予认可,将来信直接退回。
所以,电子邮件并不是100%可靠的。邮件恢复密码虽然非常可行,但将其作为恢复密码的唯一方式,是不适宜的。
人工恢复:必须准备的救命稻草
大概最著名的“人工恢复”就是腾讯的申诉了。

图:QQ申诉
人工恢复不能没有,至少也应该有一个信箱作为联系的渠道。至于具体实施的措施可以因人而异,毕竟是人工处理。只要注意,尽量向用户索取这个账户的操作记录,谨防冒领。
QQ的普及,客观上逼出了腾讯完备的申诉措施,可以作为典型的例子借鉴。
网站的背后,必须让用户看到实实在在的人。只用机器手段处理用户账户的事情,对用户来说是不好的体验。
如果准备用电话接纳申诉,请注意不要学天朝邮政的11185,打多少遍都不见话务员的恶劣服务。
密码恢复机制的原则
- 铁律:用户的记忆是模糊的,过多的条条框框,使密码恢复失去意义。
- 不使用唯一的机制恢复密码。
- 保持人工恢复密码作为底线。
应对攻击者
应对在恢复密码界面反复猜测的攻击者,有一种相当简单的方式。
有一个常见的现象:在登录界面,如果密码连续输错3次,那么一段时间内将不准尝试登录。
既然可以控制反复猜测密码的行为,在“恢复密码”的环节,自然也可以借鉴这种方法。典型的做法是:
- 对于密码保护问题,连续答错3次,当天不能继续回答。
- 对于电子邮件,一封密码恢复邮件发过后,30分钟之后才能重发。
- 加验证码,防止用程序反复尝试。
原创文章,作者:沙渺 ![]()
发表位置:沙渺很忙博客 http://shamiao.com
原文链接:“忘记密码”:不吐不快的纠缠
发表时间:2008年12月21日
转载随意,反对抄袭,鄙视采集站。
欢迎任意使用,惟需尊重《创作共用协议 - 署名》,标明作者并链接到原文。
并且,我建议您保留文末这一小段声明,谢谢。

2008年12月21日 15:12
分类:
评论:
点击:187 
标签: 


我觉得PT Sauce(也就是PT站点使用的CMS)是最好的,正如文中所说,使用邮件恢复密码,再通过邮箱中的链接重置密码,十分方便