20年前,24岁的计算机天才路易斯·冯·安(Luis von Ahn)在卡内基梅隆大学研究程序机器人的工作原理时,首次提出了CAPTCHA(验证码)这样一个程序概念。
验证码(CAPTCHA)的全称是“Completely Automated Public Turing test to tell Computers andHumans Apart”,即全自动区分计算机和人类的图灵测试。意在用户进行操作之前,通过向请求的发起方提出问题,将伪装成人类的程序机器人从正常用户中”抓“出来。而这基于一个重要的假设:提出的问题时容易被人类解答,而机器无法解答的。
彼时,计算机技术虽已有较大突破,但路易斯发现机器若要识别扭曲的图形,仍是一个巨大的挑战,而人类却可以用肉眼很轻易地读出图片里的信息。此后,路易斯在导师布鲁姆的协助下设计出一个程序。
这个程序首先产生了一组随机的字符串,其次再对这串字符进行随机的扭曲、重叠以及污染,最后显示给正在进行操作的用户。一旦能够识别这个变形了的字符串,就可判断为人类。由此,验证码诞生,并成为辨别机器与人的一种有效方式。
伴随信息技术的蓬勃发展,验证码的作用愈发显著,它可以防止恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试等。然而当网络信息安全性要求越来越高,传统的图形及数字验证码已经不能满足人们的安全需求。为了保证服务器稳定,各类产品负责人们亟待程序员们开发出各类创新互动的验证方式。今日,Gitee星球精选了几个有趣的开源验证码项目,给正在发愁头秃的大家参考借鉴。
1️⃣itriton-captcha
开源许可证: MIT
项目作者: 智鲸开源
项目地址: gitee.com/ibaleine-op…
项目简介: itriton-captcha是一个基于uni-app生态开发的组件库的行为验证(captcha) 组件的实际效果,主要用于生成滑动验证码拼图图片和背景图片。
演示效果:
操作注意事项: 使用Node.js后端框架编写应用程序使用到行为验证时可安装 npm i,若安装sharp失败,可以切换成淘宝镜像再执行npm install sharp命令。
npm config set sharp_binary_host "https://npm.taobao.org/mirrors/sharp"
npm config set sharp_libvips_binary_host "https://npm.taobao.org/mirrors/sharp-libvips"
npm install sharp
2️⃣rotate-captcha
开源许可证: MIT
项目作者: 屈超
项目地址: gitee.com/isszz/rotat…
项目简介: rotate-captcha是一个使用PHP生成验证图片(gd 或者 imagick), 用于旋转验证的验证码,可用于各种框架。
演示效果:
注意事项: 前端已经支持原生JS,jQuery,Vue2,uni-app版本,暂未实现React版。
3️⃣AJ-Captcha
开源许可证: Apache-2.0
项目作者: anji-plus
项目地址: gitee.com/anji-plus/c…
项目简介: AJ-Captcha行为验证码,包含滑动拼图、文字点选两种方式。它采用嵌入式集成方式,接入方便,安全,高效。抛弃了传统字符型验证码展示-填写字符-比对答案的流程,采用验证码展示-采集用户行为-分析用户行为流程,用户只需要产生指定的行为轨迹,不需要键盘手动输入,极大优化了传统验证码用户体验不佳的问题;同时,快速、准确的返回人机判定结果。
效果示意图:
交互流程:
说在最后
30、50年后,计算机技术若是实现爆炸性增长,人工智能已经能有效的应对人类反向测试与验证手段,几乎完全复刻我们人类的思考方式。那时,又会诞生怎样的鉴别方法呢?
如果超人工智能的出现,伪装成人类,人类有什么办法可以互相证明自己不是人工智能?一旦,超人工智能无处不在的,甚至有可能掌控人类,渗透至生活点滴,那时我们又该以怎样的姿态辨别请求的发起方究竟是不是人类呢?