问题概述
需要确保用户输入的密码强度足以防止恶意攻击。
示例
用途
- 用于辅助用户设置不易被人猜中或被计算机程序破解的账号密码。
- 用于增加用户密码的复杂度,提高攻击者篡改系统的难度。
- 用于指导用户设置强度够高的密码,让用户了解什么是好的密码。
解决方案
根据预设的规则判断密码的强度,然后紧靠着密码输入框显示一个水平标尺,如果密码强度不高,则标尺上只有一小部分被高亮显示,密码强度越高,标尺上就有越多的部分被高亮显示。
也可以用不同颜色的条形块表示密码的强度,例如绿色条形块表示密码强度高,红色条形块表示密码强度低。
1)密码强度该多高?
如何定义高强度密码还存在争议。乍看起来就很复杂的密码具有高安全性,但是密码创建方式过于复杂和死板,创建的密码反而起不到安全效果。密码过于复杂,增加了用户记住密码的难度,有时这就是“”提高密码安全性“失败的起因,因为有些用户为了记住新的太过复杂的密码而将密码记在纸条上并将其粘到显示器上。在某些单位,3个月就要求强制更换密码,这种问题更严重。
2)高强度密码是什么样?
基于上一段所述,在此强调,一个强度足够的密码不需要满足下列所有条件,只需满足其中一些就可以。一个密码,根据下面这些规则,满足一条就可以加1分(0分表示密码强度最弱,5分表示密码强度最强)。
根据上述5条规则,根据密码得到的分数,可以将密码强度分为6个等级(0-5)。
- 密码长度超过8个字符。
- 密码中包含大写和小写字符。
- 密码中至少包含1个数字。
- 密码中包含特殊符号。
- 密码长度超过12个字符。
3)字典攻击
虽然上一段介绍的密码检查规则可以在客户端用JavaScript代码实现,但这种检测并不能阻止字典攻击方式破解用户的密码。为了便于记住密码,人们倾向于将真正的单词中的字符用数组或者特殊字符替换,然后将其作为密码。例如“P@ssw0rd”,这其实并不是一个高强度密码。现在的密码破解软件擅长破解这种字符、数字替换方式的密码。为了避免密码被轻易破解,可以调用ajax方法,根据自己定义的字典来检测密码强度是高还是弱。
4)选择合适的密码强度
需要根据保护的内容来决定密码的强度和复杂度。在心中要把握个度,可能99%的需要保护的内容的密码只需要满足第2)段介绍2-3组规则就可以了(剩下的1%才是需要高强度密码保护的)。
5)常见的密码设置建议
-
- 使用看似随机选择的字符和数字组合作为密码。
- 使用不需要看键盘就可以直接手输的密码,这样可以降低周围的人偷窥你密码的可能性。
- 定时更改密码。
- 不要使用网络ID及其变换(全大写、反序、内容重复等变换)作为密码。
- 不要使用自己或别人的名字及其变换作为密码。
- 不要使用自己或别人的昵称作为密码。
- 不要使用任意字典中包含的单词、词组、简称等作为密码。
- 不要使用与自己相关的、可以轻易获取到的信息作为密码,例如车牌、宠物名称、生日、手机号码等。
- 不要使用纯字符组合或纯数字组合作为密码,要将字符和数字混合使用。
- 不要使用键盘上的顺序符号作为密码,例如qwerty、asdf等。
说明(Rationale不知道该怎么翻译)
通过在密码输入框旁边显示当前密码的强度,可以强制用户考虑选中合适强度的密码。更甚者,采用密码强度检测技术,设置最低的用户密码强度,可以提高网站的安全性。
网站中带有密码强度显示功能,可以在某一层面增加网站的安全性。这种方式不仅使网站的用户感觉更安全,而且当潜在的用户寻找合作公司时也会把这种功能作为一个必要条件。
原文地址:http://ui-patterns.com/patterns/PasswordStrengthMeter
PS:这种密码强度检测和显示方式在B/S架构的程序中比较常见,C/S架构的程序,尤其是在局域网和单机上使用的程序,用处不是很大。