一、总述
验证码存在的意义在于区分当前访问者是“人”还是所谓的“机器”。这在计算机领域称为“图灵测试”,通过图灵测试的机器可以被称作具有人工智能的特点。而验证码的存在则能够避免大多数机器通过测试,进而避免机器对系统进行大规模的恶意访问和测试。
验证码的基本设计原理即通过人类主体的感官去通过验证码,而这样的感官是机器所不具备的。此外,提高通过验证码的潜在成本也是一种方法。由上述两种原理,总结出的**三类验证码 **
- 用户输入图形中显示的内容
- 通过人体的交互、动作完成验证
- 短信、邮箱等多平台验证
前两种属于通过主体感官去通过验证码,第三种属于主动增加通过验证码的成本(包括开通多个手机号等需要一定成本的情况)。为了防止恶意通过短信平台或邮箱平台发送过多验证消息以增大服务器负担,通常第三种验证方式会与前两种方式结合。下面将对每种验证方式进行详细说明。
二、细分
2.1. 图形验证码
图形验证码是相对早期出现的验证码形式,总体来说现在的网站使用此形式验证码的比例是最高的。然而由于科技发展,图像识别技术的提高,图形验证码被破解的概率也越来越高。因此现今对安全要求较高的网站或流量较大的网站均已改用交互式的验证方式。
随着图像识别技术的提高,图形验证码也经历了两种不同方向的改进——一种是在图形上添加了各种各样的条纹等干扰信息,此方法随着图像识别技术的发展,条纹数量也越来越多,条纹的样式也让用户眼花缭乱,进而影响了用户正常识读验证码,降低了用户体验。
另一种方法是在图形中“出计算题”让用户计算并输入结果,让用户主观去进行一些机器阅读文字但无法处理的运算。然而随着搜索引擎的优化,将机器识别出的文字直接放入搜索引擎中即可得到准确结果,例如下图所示。同时,部分网站的“计算型”验证码采用了多项式的计算,计算过程繁琐,也降低了用户体验。
此类验证码在实际使用中给用户的交互体验是怎样的呢?以豆瓣的找回密码功能为例。
在“输入上图中的单词”框中输入验证码后,若输入正确,点击“重设密码”则可以跳转至下一页面;若输入错误,则显示文字,提示验证码错误。输入了的账号不消失并生成新的验证码。
豆瓣在此处的交互设计得不够人性化,通常来说,错误提示设计在验证码输入框隔壁即可,且点击“重设密码”后整页面刷新也是一种影响用户体验的表现。
个人认为,此类图形验证码的错误提示交互最佳表现应当为:用户点击“下一步”后,系统检测验证码输入,如果错误则在输入框附近直接使用轻度提示显示错误字样,验证码刷新且对于的输入框清空。至于账号或密码是否清空则视情况而定:如果用户输入信息种类繁多、内容冗长,则倾向于为其保留内容(当然密码最好清除);若内容相对简单,则可以直接清除,以增大破解成本。
2.2. 交互型验证
交互型验证码可以说是验证码2.0的版本。通过人工完成一些机器无法自动完成的交互,同时系统反向检测用户的一系列动作是人工还是机器完成,双向验证,降低被破解的几率。
现今出现频率较高的交互型验证为“滑动验证”,即向右拖动滑块完成拼图。简书的登录界面便是这样的设计。
该操作的基本流程如下:用户输入完账号、密码后将鼠标轻放在滑块上或按住滑块,拼图出现;用户向右滑动,出现一块小拼图及待放的位置。若用户成功放置拼图,则大拼图闭合,右侧小锁变为绿色勾,反之,放置失败变为红色叉。通过较为轻度的提示暗示用户验证成功与否。
同时,该模块会告诉用户用了多长时间完成此项动作,在完成验证的同时增加了趣味性。可以说在考虑到验证安全的前提下兼顾了用户体验(简单、有趣)。
除此之外,还有一种交互式的验证码,我们称之为“点击验证码”:用户点击插件后,系统会让用户按顺序选择图像中的若干个文字,选择完成后需手动点击“验证”才能获知是否验证成功。
此方法同样利用了人和系统互相的验证来确保操作是人而非机器。同样的,此验证方式兼顾了验证安全及用户体验。此外,点击验证后才返回是否验证成功的状态也增加了破解的难度(验证错误后图片和文字会变更)
上述两种验证码具有如下优点:
- 用户体验好:大多数用户无需进行复杂的思考即可通过,同时减少了对整个业务流程的打断
- 风险控制能力强:基于人类的固有行为特征以及操作的环境信息综合进行风控决策,攻击者难以批量模拟出与正常人类行为相似的操作
-
能够拦截风险:由于1.0时代的验证码还需考虑人类的实际用户体验,因此无法将风险降到最低。而2.0时代的验证码自身已考虑到了用户体验,对风险进行拦截的可操作空间便更大
注:以上优点总结参考知乎某匿名用户
在我们的生活中,众所周知地,还存在一个具有神奇验证码的网站——12306。12306的验证码是通过让用户选择文字提示对应的物品,通常数量为2-3个,全部选择正确后可跳转下一页。
按照12306的初衷,使用此类验证码的原理是通过机器无法主观识别的物品去区分用户和机器。但在实际使用过程中,由于图片分辨率过低(为了保证图片大小较小能使用户在网络较差的环境下也能刷新出来),部分用户无法在第一次选择时就正确跳转。同时,当这一新型验证码刚刚出现时,也有人发表过相关的破解文,但从实际效果来看,2016年春运期间,许多抢票软件均无法跳过验证码,需要用户自行选择验证码。
从上述结果来看,12306的验证码的基本需求达到了——避免了机器自动识别,提高了用户手动抢票成功的几率。只可惜为了完成这样的需求,牺牲了用户体验,部分用户也因为错误地选择了验证码而无法抢到车票。如果12306能够尝试使用前文所说的滑动/选字验证,效果是否会更好?由于涉及到上亿的交易量,相信铁路部分不会轻易进行此类尝试。
2.3. 多平台验证
多平台验证是一种不能完全避免“机器”,但能够在一定程度上增大破解成本的验证形式。此类验证通常需要和前两种验证方式进行结合(若不进行前两种验证,则使短信或邮箱服务器瘫痪的攻击成为了可能)。
多平台验证的目的除了防机器注册外,还有确认用户的手机号或邮箱是否正确的作用,可以防止后期用户找回密码时出现不必要的麻烦,同时避免发送推广消息到未注册用户的手机或邮箱内引起反感。
现今的多平台验证通常为单向验证,同时也存在部分双向验证的网站。单向验证易于理解,注册完成后由网站服务器向邮箱或手机发送验证邮件或验证码,用户点击验证邮件内的链接或输入验证码即宣告完成验证。
双向验证网站通常需要用户通过手机向指定号码发送指定数字,随后用户将收到一个新的验证码,将此验证码填入网站完成验证。此验证方式曾出现于12306的手机核验功能中。此举的目的①在于确认用户的手机号是正确的;②防止使用短信服务器的票贩子通过服务器回复验证码而非通过真实的手机。
三、总结
通过分析现今存在的各种不同的验证码形式,了解它们的基本原理、用户体验、交互和基本流程以及存在的不足,对注册流程有了更深一层的认识。虽然有人认为“注册流程在整个产品中是微不足道的”,但只有对产品的每个细节都精益求精才能做出好产品。希望自己将来如果能够有机会设计某某产品的注册流程时,能够以本文作为其中的一部分理论基础。