天天看点

【源码分析】极验验证官方SDK源码分析和实现思路前言源码来源源码分析项目核心不足引用资料

2016年就这么来了,新的一年,继续努力~

最近,除了12306的验证码火起来以后,还有一个在界面上拖拽的验证码,也火了起来,就是这次要说的<code>极验验证</code>,在这个万众创新的时代,工具类产品能做到这样,也是很不错的~

来自于官网提供的PHP SDK

<a href="https://github.com/GeeTeam/gt-php-sdk">https://github.com/GeeTeam/gt-php-sdk</a>

本次下载的提交版本为 commit fd4b1d8cc6aa30f9c2dc5671ebfddc18e39e892e

基本的展示界面,文件位置 <code>/static/login.html</code>

下面是截取的验证码对于div和内嵌的js代码

js思路比较简单

引入js

ajax获取展示验证码的对象参数

如果没有载入完成就再次载入

通过ajax返回的参数,再用js创建验证码对象

展示在页面上

url : “../web/StartCaptchaServlet.php?rand=”+Math.round(Math.random()*100)

这里对应的地址,是ajax本地的地址,后面接了一个随机的地址

文件位置 <code>/web/StartCaptchaServlet.php</code>

js进行ajax,到最后和服务器进行通讯的类

文件位置 <code>lib/class.geetestlib.php</code>

从文件名和引用配置文件来看,做SDK并没有考虑到命名空间 = =

直接访问地址 <code>"http://api.geetest.com/register.php?gt=" . CAPTCHA_ID</code> ,可以得到每次不一样的32位字符串,所以这个加密字符串就是每次验证码显示的内容,经过js解析之后,进行展示

每次展示验证码,都会从服务器获取验证码对于的参数,经过动态加载的js文件,展示出对应的验证码。

对应的验证操作,它会根据表单的提交方式,提交用户滑动后的结果,从服务器端进行校验。

表单提交的结果

再通过后台进行校验

本地服务器进行对用户拖拽验证码进行校验。

文件对应位置 <code>/web/VerifyLoginServlet.php</code>

就这样,完成了下图的流程

【源码分析】极验验证官方SDK源码分析和实现思路前言源码来源源码分析项目核心不足引用资料

前端展示机制,通过js动态生成拖拽页面元素进行本地拖拽展示

后端检验,要求和前端的算法进行解密,匹配是否验证准确

本地验证只是能进行本地校验结果,如果没有对官方服务器的通信,还是不能展示出验证码的,同时也将网站的所有验证信息暴露给了极验官方

<a href="http://www.geetest.com/install/sections/idx-basic-introduction.html#id7">http://www.geetest.com/install/sections/idx-basic-introduction.html#id7</a>