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>
就这样,完成了下图的流程
前端展示机制,通过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>