陈欣余
(浙江省杭州第二中学 浙江 杭州 310052)
为了防止人为利用计算机进行大批量注册,大批量的散布商业广告,恶意评论,利用枚举尝试出用户密码,侵犯用户隐私,人们用验证码技术尝试避免这些不良行为。目前已经广泛运用的有传统型验证码、点选型验证码、滑动型验证码等。这些验证方式虽然都能有效的区分人机操作,但是正常情况下的用户每次登录都需要进行验证,比较的繁琐。因此本文主要设计了一种智能验证码,运用浏览器指纹,提取用户使用的浏览器特征,使白名单中的正常用户避免验证,只对黑名单用户进行强有力的验证,有效的判别正常与异常用户,优化了人机识别的机制,使用户操作更便捷。
验证码就是将一串随机产生的数字或符号,每次刷新页面的时候产生不同的序列,之后生成一幅图片,图片里加上一些干扰元素,由用户肉眼识别其中的验证码信息,然后输入表单提交网站验证,验证成功后才能使用某项功能。验证码通常用在用户登录或留言的网页界面中,当用户在浏览器端输入验证码之后,将用户名、密码和验证码等信息提交到服务器,服务器端获取用户提交的数据之后,判断用户提交的验证码字符与服务器端保存的字符是否相同。如果相同,则通过对用户提交信息的验证,否则将提示没有通过验证的提示信息。
验证码的出现主要是为了进行人的行为与计算机行为的自动识别,用于用户的身份识别并防止计算机对网站与应用的自动攻击。以下列举了几种攻击行为以及运用计算机设计恶意程序操作的后果。
(1)现实中的注册和登录环节中,存在一些恶意的程序,会实现自动,大批量的注册,抢占账号,有可能会导致连续相同信息的发表,对程序恶意攻击。
(2)同样存在恶意程序对特定账号不断进行密码尝试,恶意程序可以通过穷举法在所有的字母组合中不断的尝试来破解用户的密码。但是,如果在用户登录的时候加上验证码技术,使得每一次身份验证都有动态的信息在改变,由于验证码每次产生的字符串都是随机的,所以简单粗暴的攻击工具就无能为力了。
随着安全技术的发展,验证码已有各种各样的形式,大体上分为以下三种类型,分别是传统验证码、点选型验证码以及滑动型验证码。
1.3.1 传统验证码
登录系统会随机产生一串数字或符号,每次刷新页面的时候产生不同的序列,之后生成一幅图片。再将字符变色,旋转,扭曲。这种区分人机操作的方式的优点是对于程序设计来说较方便,但对于一部分用户来说,有时图片的变形很难快速辨认,这给用户造成了不便。
1.3.2 点选型验证码
系统将随机给出一组图片,要求用户按照指令有顺序地点击其中的一张或多张图片,这种验证方式很新颖,所以它的优点在于实现了更好的人机交互,但缺点也很明显,用户完成指令所花费的时间较长,同时它也没有考虑到特殊人群是否能读懂并完成指令。
1.3.3 滑动型验证码
滑动型验证码的操作步骤比点选型简单,它要求用户移动滑块将拼图滑动到正确的位置使其拼成一块完整的图。这种滑动滑块的方法也是计算机不容易实现的。但在实际体验的过程中虽然是人为操作,但也有滑动位置错位等系统识别的失误,使得用户要反复操作,费时费力。
浏览器指纹是一种身份追踪技术,当用户通过浏览器来访问某一网站时,便会记录浏览器的许多种特征,大量的这些特征就可以标识一个用户,其唯一性就像指纹一样。浏览器指纹就是通过浏览器各种属性的综合,能够提取到足够有价值的信息,通过将提取的属性进行字符串拼接,然后通过哈希计算将这个字符串转化成128位十六进制的字符序列。这个128位的字符序列就作为用户的唯一标识。
浏览器有众多的属性,可以生成浏览器指纹,浏览器指纹特性通常包含字体、插件、用户代理、cookies是否开启、时区等,各种特征的提取方式不尽相同,浏览器发送请求时,会在HTTP请求头中包含一些信息,包含用户代理一级可接收的数据的类型,服务器可以从HTTP请求头中获取User Agent和HTTP_Accept,cookies的设置信息、所属时区、插件信息以及语言等可以通过javascript直接调取浏览器相关方法获取,系统安装的字体列表可以通过 fl ash结合JavaScript的方法获取。
以上提到的传统型,点选型和滑动型验证码是目前最普遍的的验证方式,这些验证方式的设计原理很简单,但最重要的一项不足之处在于,这些验证方式的用户体验较差。基本上所有应用软件上的登录步骤中都有验证这一环节,对于用户来说操作次数太多,不简便。而智能验证码是为了解决以上的问题设想出来的优化用户体验与人机交互的机制。简单的概括,它设定的规则能避免对正常用户的验证,对普通用户进行普通验证,只对异常用户进行更强有力的认证,优化了用户体验。
图1 系统设计流程
系统设计的步骤如下:系统将设立一个白名单与黑名单,将判断出来是稳定用户的信息存入白名单中,将异常用户的信息存入黑名单。用户在登录时,会通过脚本获取用户的浏览器指纹信息,之后将获取到的信息传入到服务器中。首先判断该用户是否在白名单中,如果在则不显示验证码即可直接登录。如果不在,则程序继续判断是否在黑名单中。如果在黑名单中,则加强验证,如果不在,则继续判断是否在数据库中。如果判断出该用户还未出现在数据库中,那么该用户是新用户,下一步操作是储存新用户信息,并显示验证码。如果判断出该用户已经在数据库中,则继续显示验证码,并存储此次登录的信息,以便确定是把该用户移入白名单中,或放在普通数据库中,还是存入黑名单中。白名单以及黑名单设立的标准就是:若用户此次登陆正常,则正常值加 1。若此次登录异常则异常值加 1。系统会记录总的登录次数。经过一段时间,若正常值占总登录次数的比例达到100%,则将该用户移入白名单。若异常值占比达到30%(这个比例可以在后续优化过程更改)则移入黑名单中。若两者都不是,则仍将该用户信息存在数据库中。这样的设计也实现了白名单中的用户数量从零到有。同理若白名单中的用户出现异常,其存储的异常值占比达到了设定的阈值也会被移出白名单。简单的说,智能验证码设计的原理是完全信任白名单中的用户,不对这些正常用户进行人机操作的辨别,只对异常用户进行人机识别,简便了正常用户的操作。
本文在第一部分介绍了什么是验证码以及验证码的发展,第二部分提及验证码运用到的相关技术即浏览器指纹,第三部分将介绍新的验证方式--智能验证码的设计,包括其原理以及运行的流程示意图,智能验证码避免了正常用户的验证操作,大幅度提升了用户体验。由于信息安全问题受到越来越多人的关注,验证码技术应运而生,本文所设计的智能验证码技术通过浏览器指纹对正常用户跳过验证环节,对恶意用户实行下一步更强的认证,对普通用户实行简单认证。这样的操作提升用户体验。然而本文提出的基于浏览器指纹的智能验证码的设计也有一些不足的地方,比如本系统在判断用户是在白名单中还是黑名单中的时候,判定维度较单一,容易出现误判的效果,需要在未来的实践中完善。