0%

CAPTCHA简介与Java实现

概念

CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机或人的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。

目前验证码被广泛应用于网站登录、注册、防刷等处,用于识别和防止自动化程序恶意获取服务和数据。

类型

目前大家常见的几类验证码有:

  • 标准验证码(图片),图片中一般是随机组合的字母和数字,对背景和内容进行扭曲,增加噪点和曲线,使程序难以识别
  • 根据界面图形,进行鼠标、手指(移动端)交互操作(滑动拼图验证,点选验证)
  • No CAPTCHA (Google新一代reCAPTCHA,升级的风险分析技术可以智能无感知的判断人类与机器)
  • 语音验证(播放一段音频给用户,用户获取信息后提交比对)
  • 短信、邮箱验证

原理

采集用户所处环境信息以及操作信息,提交这些信息给后端服务器进行判断。
采集的信息多有:

  • 插件
  • User-agent
  • 屏幕分辨率
  • 在captcha的iframe中进行鼠标、键盘、触摸操作的次数和记录
  • 渲染canvas图像
  • Cookies
  • 用户输入内容

服务端利用的技术,目前高端的验证码服务,大多会引入海量样本数据,引入深度学习来识别机器与人的行为模式。

Google的reCAPTCHA首先检测客户端环境,判断使用者是否处于人类的操作环境中。如果检测结果在容错范围内则直接通过测试,否则弹出验证码进行二次认证。

滑动验证的核心并不是简单的拼接成功就可以过,也不是简单的算一下偏移量就能破解。
新的滑块验证码方案,验证码后台针对用户产生的行为轨迹数据进行机器学习建模,结合访问频率、地理位置、历史记录等多个维度信息,快速、准确的返回人机判定结果。

滑动拼图验证码、图中点选验证码、智能无感知等,其背后的原理除了对滑块起始位置的认知、图中文字及其顺序的认知外,实际还会基于在页面上的操作行为、操作轨迹,以及当前设备的指纹、所运行的环境等维度进行大数据分析,并利用有监督和无监督的机器学习手段,不断升级和优化模型,不断提高破解的成本,保证人机识别的效果。

验证码服务平台

极验验证 http://www.geetest.com/type/
网易云 易盾 http://dun.163.com/trial/sense
腾讯验证码 http://open.captcha.qq.com/cap_web/experience-slidepass.html
Google reCAPTCHA https://www.google.com/recaptcha/intro/v3beta.html#