技术宅
验证码 掀起你的盖头来
老网民可能都知道,在前几年的网络世界,我们几乎看不到什么验证码,验证码是近几年才出现的新生事物,现在几乎每个网站、论坛都会有验证码出现。验证码顾名思义就是用来验证用户某种操作(如购物网站提交订单、论坛提交回复、用户注册)的一种技术手段(图1)。
那么为什么现在网站要推出验证码?验证码的主要作用一是用来防止机器人注册,同时用于验证合法用户的提交。泡论坛的朋友都知道,现在论坛里都会有很多广告帖,大部分广告帖都是机器人注册的账号,这样纯水帖给论坛管理带来很大的不便。因此为了阻止机器人自动注册账号和自动发布广告帖,很多论坛在注册时引入了验证码机制,通过随机出现的图片或数字密码来阻止机器人的自动注册(图2)。
验证码的另一个作用则是用来减缓网站服务器的处理压力。对于一些大型的网站或论坛,因为同时在线的用户很多,如12306网站在2015年春运高峰日的PV值是297亿,流量增加1000倍。面对这样海量、高并发访问流量,如果用户在提交订单的时候不引入验证码机制来延缓提交,那么网站服务器就会瞬间当机。当然验证码的存在也可以阻止机器人自动提交订单(图3)。
免输入——抢票软件如何自动输入验证码
如上所述,验证码的作用主要是阻止类似机器人的自动操作。不过使用抢票软件购票的朋友都知道,虽然12306网站在登录、提交订单的时候都用了验证码机制,不过这些验证码并没有给抢票软件造成任何麻烦,它们仍然可以在后台自动输入验证码(图4)。
这些软件是怎么突破验证码封锁的?其实对于早期12306网站使用的数字(包括字母)方式的验证码,抢票软件是通过OCR识别技术来通过验证的。比如上图的验证码字符是“kdte”(验证码一般忽略字母大小写),这样当抢票软件读取到上述图片时,它会将这个图片传输到服务器,这样在服务器上的OCR软件通过扫描就可以快速获得正确的验证码,扫描结果返回抢票软件就可以直接输入正确的验证码了(图5)。
同样的对于网站其他需要输入验证码的地方,抢票软件都是通过上述方法实现准确的识别和正确的输入,从而实现自动、高效的购票。
道高一尺魔高一丈——验证与反验证
简单字符式的验证码容易被机器识别,为了提高验证码的效率,现在很多网站纷纷使用各种方法来加强OCR识别的难度。一些网站使用类似“7+2=?”的简单算术式(用户通过输入正确答案)来作为验证方式,一些网站则使用中文字符来作为验证码,另一些网站如腾讯网站在注册QQ账号页面,则通过为验证码添加背景图片来干扰机器的OCR识别(图6)。
不过人眼都可以轻松识别,对于机器OCR来说更是小菜一碟,比如类似“7+2=?”简单算术式的验证,除了OCR只要再将识别结果进行简单运算即可获得正确的验证码。
既然简单字符式的验证码容易被机器识别,于是一些网站开始使用图片式的方法来作为验证码。12306网站近日就启用了全新的图片验证方式,当用户在登录12306时,必须使用鼠标在8张图片上点击符合要求的图片,点击后会在图片上留下铁路标记(图7)。
图片验证码看上去要比字符式的复杂,那么识别起来是不是就更难?其实对于机器识别来说,图片验证码的难度并没有提高多少,字符识别机器是通过OCD扫描识别,图片同样可以借助图片识别技术进行精准的识别。相信很多朋友已经使用过百度的“以图找图”功能,这个实际上就是典型的机器图像识别技术(图8)。
当然就具体操作而言,图片识别流程和OCR相似。以上述12306的验证图片为例,图片服务器首先获得网站的验证码图片,然后将8张图片进行编号,并且将图片对应的文字说明一起列出,这样只要找到其中2张文字说明(可以是关键字)相同的做个标记。比如上述验证码图片的正确选择是“福娃”,这样服务器获得福娃信息的图片(1、6)后,就会将点击图1、6指令传输给抢票软件,从而实现图片验证码的自动输入。因此从技术角度上来说,12036采用图片验证码难度并没有比字符识别增加多少。
验证码的未来
验证码作为一种目前普遍使用的验证手段,除了阻止机器人自动识别外,还是我们日常操作的一个重要保护手段。因此各大公司也纷纷在验证码识别技术上进行改进,一些公司通过多种验证的方式加强验证的安全性。如现在很多在线支付网站就推出附加短信验证的保护措施,除了要求输入直接显示的验证码外,还要求输入预先绑定的手机获取的短信验证码来加强验证(图9)。
此外,一些公司则通过人类的具体行为和机器的不同来实现验证。Google就提出了一个“human behavior analysis”的方案,它的核心是将用户的行为作为判断人与计算机的准则。这样推出的验证有很强的人类思维行为,从而杜绝机器的自动识别,有效保证验证码的安全。
总之,当验证码的存在给我们日常的网络行为(如购票)带来不便时,用户希望通过机器的识别来提高操作效率;而当验证码为在线支付等操作带来保驾护航时,人们又希望有机器无法识别的验证码来保障安全,鱼和熊掌不可兼得也。