验证码之所以存在,就是为了防止机器的自动识别,当某种验证码的自动识别软件烂大街的时候,这种验证码技术也该被产品开发团队打入冷宫了,该软件存在的价值,也就只剩下编程考古了。
其实,验证码自动识别的工具并不是没有,网上有不少采用大厂的 OCR API 实现验证码自动识别的博文,用于爬取数据之类的场景,但图像识别技术的进步,也倒逼着打码技术的进步。
题主说的简单型的验证码,前景和背景容易分离、多位字符串容易切割的,传统的 SVM (支持向量机)就可以轻松搞定。复杂的验证码,使用这几年风光的 CNN(卷积神经网络)也能将其斩于马下,然而再强大的 CNN 也依赖于大量的标注数据。如果要做到 90% 以上的识别率(90% 对于很多使用者来说还是很渣的),可能需要数以万计的样本,和比较长的训练时间。训练成功,平台认为之前的打码方式被破解后,又会提升难度或者换一种思路,别有用心的攻击者又要重新标注数据,重新训练……投入的成本,能否产生足够的利益呢?这是他们需要考虑的问题。
深度学习能力增强的同时,现在的验证码技术也衍生出了更为丰富的方式,比如B站,已经采用了滑动拼图验证码。
以网易云为例,我们提供的云安全验证码,可对外提供4种类型的验证码,滑动拼图、图中点选、短信上行验证为常规验证体系,智能无感知验证码为独立的验证体系。
网易云常规验证体系
网易云智能无感知验证码
云安全验证码抛弃了传统字符型验证码展示-填写字符-比对答案的流程,采用验证码展示-采集用户行为-分析用户行为流程,用户只需要产生指定的行为轨迹,不需要键盘手动输入,极大优化了传统验证码用户体验不佳的问题;同时验证码后台针对用户产生的行为轨迹数据进行机器学习建模,结合访问频率、地理位置、历史记录等多个维度信息,快速、准确的返回人机判定结果。灵活采用这些打码技术,可以更为有效地防御攻击,同时保证用户体验。