CAPTCHA之去与留?

Parallel
• 阅读 1848

以下文章来源于《To CAPTCHA or not to CAPTCHA?》 ,作者是 Gartner高级分析总监Akif Khan,他长期专注于数字欺诈检测和身份验证领域,对captcha 非常有研究。近日,他在Gartner网站上撰文发表了对 CAPTCHA之去与留的看法,前半段回顾了CAPTCHA的历史发展,其中极验 GeeTest 就作为创立于中国并成功在海外市场构建品牌影响力的CAPTCHA服务商成为第五阶段最典型代表。后半段从正反两方面的视角,非常精彩的分享了对这个问题的看法。

我常和客户讨论数字欺诈检测和身份验证领域各种有趣的话题,其一便是机器流量检测和缓解。每当谈及于此,我们总会围绕CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart)进行一番热切探讨。我注意到他们对CAPTCHA的态度区别相当明显,一派支持使用,另一派则坚决反对。反对的一方不仅打心眼里抵触使用CAPTCHA,还旗帜鲜明地坚决反对它。

由于我本人对CAPTCHA非常感兴趣,先茬个话题简要介绍一点CAPTCHA的发展历程(如果你对追根溯源没有太大兴趣,也可以跳过这一节)。

一、CAPTCHA的发展历程

第一阶段二十世纪九十年代,CAPTCHA首次投用。彼时的搜索引擎Alta Vista饱受垃圾邮件困扰,为缓解该问题而引入了字符验证码这个概念。

第二阶段reCAPTCHA的诞生,reCAPTCHA的验证界面设计为一对词组,起初用于辅助训练人工智能技术,具体来说就是训练古籍的扫描和恢复系统。扫描过程中,系统可能识别了第一个单词,却无法辨认第二个单词。一旦一部分用户在验证时正确输入了第二个单词,就相当于帮图书扫描系统解决了无法辨认的问题。谷歌后来收购了reCAPTCHA。

第三阶段reCAPTCHA 2.0问世,该版本增加了勾选验证的形式。谷歌验证码从一开始只检测用户行为,到根据用户风险等级判断是否二次检测,再发展到如今的饱受诟病的图片选择的验证形式。这也是谷歌利用CAPTCHA训练机器视觉技术的又一案例,简单来说是基于对交通场景下物体的识别训练机器视觉技术,普遍猜测将应用于无人驾驶汽车项目。同时,学术界对机器视觉的关注及其商业化的发展为不法分子提供了可趁之机,通过利用学术研究成果和商业应用案例,他们进行系统开发反过来破解机器视觉技术。实际上谷歌云本身就在出售机器学习系统,这样一来情况就变成了谷歌一部分业务在制造CAPTCHA,另一部分业务却正在瓦解它。

第四阶段谷歌推出reCAPTCHA 3.0,依然是勾选验证形式,采取的用户行为分析工具看来与其他主流机器流量检测供应商没有不同。

第五阶段谷歌不再是唯一玩家,随着许多供应商在自家产品上投入的激增,CAPTCHA不断演变进化。有的商家宣称他们有非常高的人类验证通过率和极低的机器流量通过率;有的商家则专注于机器视觉验证技术,不仅人类能轻松通过,而且它不同于谷歌的机器视觉技术,暂无商业化应用,因此不法分子无法利用学术界的研究、商业化案例、以及开源研究来制造破解这类CAPTCHA的工具。

CAPTCHA之去与留?

二、支持和反对案例

回到开始讨论的,为什么部分企业愿意使用CAPTCHA?逻辑很简单,假如机器流量检测系统认定某用户是机器流量,就可以阻挡这个有潜在威胁的用户。然而机器流量检测系统并不完美,如果用户不是机器流量呢?它就阻挡了一个正常人类用户的访问。所以说CAPTCHA代表着一个机会,或一种期望,如果该用户确实是真实人类用户,他/她是可以通过CAPTCHA以自证并继续正常访问。

为什么有些企业反对使用CAPTCHA?因为真实人类用户的验证码解答率可能会非常低,从而导致这些用户无法通过,对于那部分通过验证的用户,这个过程也可能是一次糟糕的用户体验,然而不法分子的验证码破解率有时却奇高。当然这种差别非常细微,因为有时是机器进行CAPTCHA破解,也有些情况是不法分子雇佣人类来破解验证码,这背后有一个蓬勃发展的人工打码产业——在经济不发达地区,黑产以微薄的工资雇佣一批人专门破解验证码,每人每天可以破解上千个。

三、到底是否应该使用CAPTCHA?

我的答案是肯定的,只是避免用谷歌那种“请选出所有带交通信号灯的图片” 的CAPTCHA。目前市面上有众多更先进的CAPTCHA供应商可供选择,如Arkose Labs、GeeTest 、PerimeterX,各家拥有独特的方式和一些细小差异,但都比可怕的交通九宫格好用。数字商务业务普遍对降低假阳性有很高要求,因此需要给用户机会自证身份,而不是一刀切地挡住,这是一个非常值得探索的方向。如今不法分子大量雇佣打码工人以壮大机器流量,当打码工人通过验证速度过快时(代表他们日复一日地在破解这些验证),你还是需要足够智能的CAPTCHA监测这种异常。当监测到异常,CAPTCHA应自动为其增加难度,以遏制和提高打码行为的经济成本。使用CAPTCHA是在可控范围内增加用户交互,以获取更多用户和其人类特征等级的监测数据。

避免使用CPATCHA作为所有会话的默认防御,还是需要依靠机器流量检测产品来发现和阻挡大部分机器流量,再在难以界定人类行为的灰色地带部署CAPTCHA。我相信这种灰色地带的占比不会多于5%。

进行AB测试,先将需要监测的流量分区,在其中一处使用CAPTCHA,再对比结果,根据真实数据和指标决定是否使用,不要因为对那些落伍的验证方式(比如交通九宫格)有成见而放弃CAPTCHA。

我对各种CAPTCHA产品的使用体验都很感兴趣,欢迎读者们分享你们的经历。

最后说一个有趣的题外话,Amazon于2017年尝试申请一项专利,一种新型CAPTCHA产品,它对于机器来说很容易破解,但是对人类展示非常难解答的视觉验证。不出所料,这个进程被叫停了,由此可见人类易出错的特质可能才是未来对抗机器的关键点。

翻译:洪云霜
校对:海外市场运营小分队
原文链接:https://blogs.gartner.com/aki...

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
4年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
4年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
4年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
4年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
2年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这