为什么有些验证码看起来很容易但是没人做自动识别的?

比如说B站的验证码,除了背景有一些扰乱,字母稍作旋转以外,字母本身非常工整,没有扭曲也没有缺失,相互之间的重叠度也很低,这种验证码要做自动识别应该并不难吧?但似乎从没见过任何的验证码自动识别软件,这是为什么呢?  

西西吹雪提问于 2018-05-25 09:24
1 个回答
  • 社区编辑2018-05-25 09:35

    验证码之所以存在,就是为了防止机器的自动识别,当某种验证码的自动识别软件烂大街的时候,这种验证码技术也该被产品开发团队打入冷宫了,该软件存在的价值,也就只剩下编程考古了。


    其实,验证码自动识别的工具并不是没有,网上有不少采用大厂的 OCR API 实现验证码自动识别的博文,用于爬取数据之类的场景,但图像识别技术的进步,也倒逼着打码技术的进步。


    所谓简单型的验证码,前景和背景容易分离、多位字符串容易切割的,传统的 SVM (支持向量机)就可以轻松搞定。复杂的验证码,使用这几年风光的 CNN(卷积神经网络)也能将其斩于马下,然而再强大的 CNN 也依赖于大量的标注数据。如果要做到 90% 以上的识别率(90% 对于很多使用者来说还是很渣的),可能需要数以万计的样本,和比较长的训练时间。训练成功,平台认为之前的打码方式被破解后,又会提升难度或者换一种思路,别有用心的攻击者又要重新标注数据,重新训练……投入的成本,能否产生足够的利益呢?这是他们需要考虑的问题。


    深度学习能力增强的同时,现在的验证码技术也衍生出了更为丰富的方式,比如B站,已经采用了滑动拼图验证码。


    网易云为例,他们提供的云安全验证码,可对外提供4种类型的验证码,滑动拼图、图中点选、短信上行验证为常规验证体系,智能无感知验证码为独立的验证体系。


    网易云常规验证体系



    网易云智能无感知验证码


    云安全验证码抛弃了传统字符型验证码展示-填写字符-比对答案的流程,采用验证码展示-采集用户行为-分析用户行为流程,用户只需要产生指定的行为轨迹,不需要键盘手动输入,极大优化了传统验证码用户体验不佳的问题;同时验证码后台针对用户产生的行为轨迹数据进行机器学习建模,结合访问频率、地理位置、历史记录等多个维度信息,快速、准确的返回人机判定结果。


    灵活采用这些打码技术,可以更为有效地防御攻击,同时保证用户体验。欢迎免费试用