12306图片验证码吐槽风波将验证码推到风口浪尖,各种吐槽及恶搞接连而至,让之前一直无处不在但是又默默无闻的验证码风光了一回,面对普通用户的抱怨和谩骂,作为产品人员的我们,是不是应该多一些理性思考呢。
本文将三个方面来与大家分享验证码及周边知识,均是本人五年账户中心工作(三年技术、两年产品经验)的心得总结得出,希望对产品狗及运营同行有一些帮助和启发。
- 验证码功能简述
- 验证码发展史
- 对运营的影响
验证码功能简述
(常见验证码一览)
全自动区分计算机和人类的公开图灵测试(英语:Completely Automated Public Turing test to tell Computers andHumans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。
没听懂维基百科的解释?更通俗一点的说法,验证码是防止计算机程序通过大批量恶意请求来对网站进行资源消耗。
为什么这么说呢,我们纵观互联网发展史,验证码诞生初期,正是web 2.0方兴未艾之时。web 2.0打开了用户入口,但是却也给机器程序开了一个通道。恶意程序批量请求注册垃圾帐号、暴力登录进行密码破解、大批量论坛广告发帖、抢券(12306的购票)、刷投票排名……如果没有验证码,这些都是可以很简单的做到。有人要说通过IP限制等手段,相信我,这一块除了验证码是最好的防御手段,目前来说没有其他更恰当的防御方式。
但是随着互联网技术发展,尤其现在大家开口谈及的云计算、机器学习、数据挖掘、OCR识别等技术,为了提高验证码对机器人的防御难度,验证码是做的越来越复杂,而人也相应的更加难识别了。接下来我们先从验证码发展史谈起,看看它们都经历了什么。
验证码发展史
验证码的发展,是随着互联网技术相应的提升的,尤其是近些年来,包括Google在内的一些互联网公司对此方面所做的努力。
根据维基百科的定义,“在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。”,这是早期的一问一答的模式,我们可以成为问答验证。另一类也是最近兴起的方式,根据用户的页面行为来进行判断,我们尚将之称为为行为式(human behavior analysis )。
问答验证
验证码发展初期,基本上是很工整的字符,因为那个时段没有OCR,没有机器学习,没有神经网络,听起来是一个很淳朴的年代有没有。验证码也不需要设计多复杂。但是随着Google及一些技术大牛开源OCR识别库(https://github.com/tesseract-ocr),验证码识别门槛一下子就变低了,调用这些公开的库,一些基本的验证码识别率能达到85%以上,这些识别工作不超过10行代码。
(从图中图片命名可以看出,验证码被识别的准确率很高,突破95%以上)
随后,验证码为了提高破解难度,则添加的一些背景干扰图,让字符变得扭曲。但是我们可以从上图看出,识别这种背景杂乱-颜色干扰-字符扭曲的验证码,精准识别率也是很高的。
(12306的验证码)
(某网站的登录界面的文字-图片验证码)
好了,我们来看看12306的验证码是什么道理?从本质上说,这种验证码和前面的扭曲验证码道理是一样的,也是问题-答案式的样式。我们先看看破解难度,首先是要识别中文字符,其次是识别图片。中文如果不加干扰的话,是很容易识别的,这种加了干扰后,对人和机器都有一定的难度。图片识别目前没有比较成熟和像OCR开源一样的公用接口,但是很不幸的是,这种12306式的图片可以用哈希算法进行匹配,当然这有一定的难度也费时费力。不过图片验证以后肯定不是主流,生命周期也会很短,因为……Google正在筹划它的图像识别接口,Google Cloud Vision API……这项技术源于Google图片的大数据标签,建立的深度神经系统学习网络。为什么Google以前也用过12306一样的图片验证码现在却把这项技术公开,因为它们有了更有效的验证码,我们后面再讲。
行为验证
Google在今年年初提出human behavior analysis的概念,率先去掉了传统的验证码,用户只需要点击一下,就可以进行人机判别,如果被认为是机器人,那么会进行另一套复杂的验证系统。是不是很酷炫……体验地址:https://bitbucket.org/account/signup/ 目前因为众所周知的原因,国内并不能使用Google接口。
令人惊奇的是,国内居然也有做行为验证的,最早我自己在一论坛发帖时用到过,当时没怎么在意,后来居然发现一好友的公司也用上了。后来就这个事情交流过,好友表示之前每次验证码都被破解遭遇暴力注册,对运营人员造成很大干扰,技术只能频繁换验证码,越换越复杂,但对恶意程序并没有什么用……后来直接调用了这个号称行为验证的接口,部署后确实对破解者有很明显的阻碍作用,比字符验证码靠谱很多,而且用户体验也确实不错。我自己也去研究了下,目前使用这个验证码网站也挺多的,我现在先部署在公司内一些小模块试试稳定性和安全性,等有自己的结果再和大家分享。可以去新浪博客评论区体验一下:http://blog.sina.com.cn/s/blog_71ad0be10102wa7y.html?tj=1
运营和产品能做什么?
12306被喷其实已经说明了验证码和网站的内在关系,用老掉牙的话讲,验证码是一把双刃剑,它既保障安全,但是又对用户有阻碍,有些用户看到验证码头都大了,直接关闭页面走人。但是如果不加验证码,被竞争对手和捣蛋分子,分分钟刷成狗,使得成个运营体系耗费精力去维护、删除这些没意义的垃圾数据,严重的会导致运营体系崩坏、密码被盗,甚至原本给正常用户的奖励也被这些垃圾用户捞走。那么,运营或者产品人员该怎么办呢?
第一,同程序员沟通,定制合适的安全防御策略。防御策略首先就是验证码模块,建议选取合适的验证码(勇于尝鲜的可以试试上面说的那个极验验证),既能保障安全性,也不对用户体验造成损害,毕竟市场同志在外面辛苦做推广,结果用户来了却因为验证码流失,这也挺冤的。除了验证码外,还可以做一些辅助性的工作,比如对IP进行阈值限制(这个要谨慎,如果用户群体大,很容易造成大规模的误封)、
第二,设计合理的运营奖励体系。这一点尤为重要,特别是涉及积分、送券、返现的网站,如果没有合理的运营体系,会对验证码的要求十分高。不过运营设计的没有吸引力,很难吸引新用户来,这也是个矛盾的地方。
今天先写到这里吧。