VAPTCHA文档中心

VAPTCHA是什么?

功能概述

VAPTCHA是“Variation Analysis-based Public Turing Test to Tell Computers and Humans Apart”(基于变量分析法来区分人类和计算机的图灵测试程序),又称为手势验证 。一种高效、安全的人机验证解决方案。用户仅需要用鼠标绘 制指定轨迹即可完成人机验证。VAPTCHA能有效防止恶意密码破解、论坛灌水、垃圾邮件等。

产品特性

传统的人机验证解决方案,不是验证码识别困难,就是安全性不高,极易被自动化程序破解。而VAPTCHA的人机验证策略则能同时兼顾便捷性及安全性。
验证时间短。用户仅需要在需要人机验证的页面,根据要求绘制指定的验证轨迹,即可完成验证。这个过程耗时不超过1秒,远远快于传统的验证方式。
安全性。用VAPTCHA采用多层策略对可以请求进行筛选。VAPTCHA的风险分析引擎首先分析回传数据的人机特征,然后对比IP黑名单,过滤掉高危客户端发起的请求。最后进行手势轨迹对比,VAPTCHA的验证轨迹实时随机生成,经过特殊处 理后,自动化程序无法识别,而具备抽象思维能力的人脑则能正常识别。同时,VAPTCHA会追踪所有发起过验证请求的客户端行为,并进行评分,越可疑的客户端评分越低,这些客户端发起验证请求时则需要更加严格的风险分析。理论上, VAPTCHA是目前最安全的人机验证解决方案。

应用场景

传统的登录注册、投票、订票等需要人机验证的地方都可以用到VAPTCHA,尤其是对安全性要求很高,同时又希望良好用户体验的场景。验证的便利性让VAPTCHA可以应用到PC、移动设备甚至嵌入式设备。

部署VAPTCHA

服务器端

.net
PHP
NodeJs
Step1.环境准备
Vaptcha .NET SDK 适用于 .NET Framework 4.5 及以上版本。建议使用VS2012及以上版本。
要使用Vaptcha .NET SDK,您需要一个Vaptcha账号、一个验证单元以及一对VID和Key。请在Vaptcha验证管理后台查看。
Step2.SDK 获取和安装
使用命令从Github获取:
git clone https://github.com/VaptchaTeam/vaptcha-dotnet-sdk.git
github下载地址 手动下载获取:
引用Vaptcha SDK项目,在你的项目中使用以下代码即可导入SDK:using VaptchaSDK。
Step3.配置接口
SDK中包含了三个需要配置的接口,分别是:GetChallenge(获取流水号),Validate(二次验证),DownTime(宕机模式提供与前端sdk交互),需要在站点中提供访问的url。
Step4.代码示例
初始化Vaptcha及备注
/// 验证单元ID
string VID = "xxxxxxxxxxxxx";
/// 验证单元密钥
string KEY = "xxxxxxxxxxxxx";
Vaptcha vaptcha = new Vaptcha(VID, KEY);
获取流水号
//获取流水号
string challenge=vaptcha.GetChallenge();
二次验证
//获取流水号字段
string challenge = Request.Form["challenge"];
//获取token字段
string token = Request.Form["token"];
//获取场景字段
string sceneId = Request.Form["sceneId"];
//二次验证获取结果
bool result = vaptcha.Validate(challenge, token, sceneId);
宕机模式 使用GET请求
//获取数据
string data = Request.Form["data"];
//执行宕机模式交互操作
Response.Write(vaptcha.DownTime(data));
Step5.DEMO
Step1.环境准备
Vaptcha PHP SDK 适用于 php5.2及以上版本,且需要开启 curl
要使用Vaptcha SDK,您需要一个Vaptcha账号、一个验证单元以及一对VID和Key。请在Vaptcha验证管理后台查看。
Step2.SDK 获取和安装
使用命令从Github获取:
git clone https://github.com/VaptchaTeam/vaptcha-php-sdk.git
github下载地址 手动下载获取:
将sdk文件引入程序中并初始化即可 Example:
require_once dirname(__FILE__) . '/lib/vaptcha.class.php';
Step3.配置接口
SDK中包含了三个需要配置的接口,分别是:GetChallenge(获取流水号),Validate(二次验证),DownTime(宕机模式提供与前端sdk交互),需要在站点中提供访问的url。
Step4.代码示例
<?php
header('Content-type: application/json');
require_once dirname(dirname(__FILE__)).'/lib/vaptcha.class.php';
class Validate
{
    private $vaptcha;

    /**
     * 实例化vaptcha
     */
    public function __construct(){
        $vid = 'xxxxxxxxxxxxx';
        $key = 'xxxxxxxxxxxxx';
        $this->vaptcha = new Vaptcha($vid, $key);
    }

    /**
     * 获取流水号
     *
     * @return json
     */
    public function getVaptcha(){
        $challenge = $this->vaptcha->GetChallenge();
        return $challenge;
    }

    /**
     * 获取宕机模式
     * method type GET
     * 此处只需获取get请求的数据,让后调用宕机模式的接口将其返回即可。
     * @return json
     */
    public function getDowTime(){
        $data = $_GET['data']; // 客户端sdk以get方式发送数据
        return $this->vpatcha->DownTime();
    }

    /**
     * 提交表单进行二次验证
     *
     * @return void
     */
    public function login(){
        $validatePass = $this->vaptcha->Validate($_POST['challenge'],$_POST['token']);
        if ($validatePass) {
            // 验证通过接下来验证表单或者进行登录等其他操作
            //:TODO
            return json_encode(array(
                "status" => 200,
                "msg" => '登录成功'
            ));
        } else {
            // 验证失败返回错误信息
            return json_encode(array(
                "status" => 401,
                "msg" => '验证错误'
            ));
        }
    }
}

/**
 * 路由 为客户端提供接口
 * auth.php/getVaptcha => 获取 vid 和 challenge
 * auth.php/getDowTime => 宕机模式接口,此接口必须为get请求
 */
$route = substr($_SERVER['PATH_INFO'], 1);

if($route !== 'getVaptcha' && $route !== 'getDowTime' && $route !== 'login'){
    echo Response::notFound('not found '.$route);
    die();
}
$validate = new Validate();
echo $validate->$route();
Step1.环境准备
Vaptcha SDK NodeJs版本适用于 nodeJs4.0及以上版本
要使用Vaptcha SDK,您需要一个Vaptcha账号、一个验证单元以及一对VID和Key。请在Vaptcha验证管理后台查看。
Step2.SDK 获取和安装
GitHub地址:https://github.com/VaptchaTeam/vaptcha-node-sdk,下载vaptcha.sdk.js并引入
推荐使用npm安装:
npm install vaptcha-sdk --save
Step3.配置接口
SDK中包含了三个需要配置的接口,分别是:GetChallenge(获取流水号),Validate(二次验证),DownTime(宕机模式提供与前端sdk交互),需要在站点中提供访问的url。
Step4.代码示例

"use strict"
const http = require('http');
const url = require('url');
const fs = require('fs');
const querystring = require('querystring');
const Vaptcha = require('vaptcha-sdk');
const server = {
    vaptcha: null,
    
    /**
     * 实例化vaptcha
     */
    init() {
        let vid = 'xxxxxxxxxxxxx',
            key = 'xxxxxxxxxxxxx';
        !server.vaptcha && (server.vaptcha = new Vaptcha(vid, key));
    },

    /**
     * 获取流水号
     * 
     */
    getVaptcha: (request, response) => {
        server.vaptcha.getChallenge()
        .then(r => {
            response.write(r);
            response.end();
        })
        .catch(e => {
            response.end();
        })
    },

    /**
     * 获取宕机模式
     * 此接口只接受get请求
     */
    getDowTime: (request, response) => {
        let data = url.parse(request.url, true).query.data;// 客户端sdk以get方式发送数据
        server.vaptcha.downTime(data)
        .then(r => {
            response.write(r);
            response.end();
        })
        .catch(e => {
            response.end();
        })
    },

    /**
     * 获取表单信息,并进行二次验证
     * 
     */
    login: (request, response) => {
        let post = '';
        request.on('data', function(chunk){    
            post += chunk;
        });
        request.on('end', function(chunk){
            post = querystring.parse(post);
            server.vaptcha.validate(post['challenge'], post['token'])
            .then(r => {
                // 验证通过接下来验证表单或者进行登录等其他操作
                //:TODO
                response.write(JSON.stringify({
                    msg: '登录成功'
                }));
                response.end();
            })
            .catch(e => {
                // 验证失败返回错误信息
                response.write(JSON.stringify({
                    msg: '验证失败'
                }));
                response.end();
            })
        });
    }
}


/**
 * 路由
 * @param request 
 * @param response 
 */
const router = (request, response) => {
    let pathname = url.parse(request.url).pathname;
    if (pathname === '/'){
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.write(fs.readFileSync('./demo/index.html').toString());
        response.end();
    } else {
        let method = pathname.split('/')[1];
        if (Object.keys(server).indexOf(method) >= 0){
            response.writeHead(200, {'Content-Type': 'application/json'});
            server.init();
            server[method](request, response);
        } else {
            fs.readFile('./demo' + pathname, (err, data) => {
                if (err) {
                    response.write(pathname);
                } else {
                    response.write(data.toString());                                        
                }
                response.end();    
            })
        }
    }
}

http.createServer((request, response) => {
    router(request, response);
}).listen(8888);

客户端

Step1.环境准备
step2.获取VID及Challenge
step3.获取VAPTCHA对象并初始化
  • 嵌入式
  • 点击式
  • 隐藏式
  • 
                                        

FAQ

如何防止人工打码

所谓人工打码就是打码平台通过雇佣廉价人力劳动力来识别验证码,对于这样的破解方式,所有人机算法都失效了,但是并不是完全不可避免。采取下面的措施,VAPTCHA能拦截掉大部分人工打码的验证请求。
唯一性判断。用每次验证请求发起时,VAPTCHA会生成一个唯一流水号并与客户端IP进行关联。重复使用流水号或者执行验证时使用其他IP都不会通过人机验证。
特征判断。VAPTCHA会根据客户端环境、请求频率、通过率等特征来判断是否来自人工打码的验证请求,复合大多数特征则返回验证失败并同时标记当前客户端为可疑客户端。
标识及IP黑名单过滤。曾经发起过可疑请求的客户端会列入VAPTCHA实时更新的动态黑名单并根据攻击强度赋予不同的权重,只有在特定时间段内不再发起攻击性请求才会黑名单移除,这些客户端发起的请求不会通过验证。

VAPTCHA支持的最大并发量是多少?

为了应对巨大验证请求,我们在持续的对程序、流程、算法进行优化,同时VAPTCHA提供了丰富的服务器及带宽资源,并永远保持具备当前峰值140%请求量的计算能力。理论上,目前VAPTCHA可以承担每秒5W+的并发验证请求。

使用VAPTCHA验证服务需要付费吗?

注册VAPTCHA即可免费使用基础验证服务,免费版每小时验证量上限不超过1000次。如果有自定义背景、LOGO及较高的验证量需求则需要支付相应费用购买VIP服务。

VAPTCHA的安全性如何?

VAPTCHA的安全性主要体现在两个方面。
验证码防护。 与传统的验证方式不同,VAPTCHA采用轨迹匹配率作为“码验证”通过的标准。以轨迹作为“验证码”,安全性将得到大幅提升。自动化程序对传统验证码识别步骤大致分为二值化、降噪、OCR识别三个步骤,而轨迹验证码融合于图片背景中,具备抽象思维的人脑可以轻易识别,机器则很难通过二值化及降噪提取出轨迹。让机器学习建立特征库通过OCR方式来识别无限样本的“随机轨迹码”也是巨大的挑战。
行为特征防护。VAPTCHA独有的风险分析引擎会对客户端环境、行为等进行安全评估。模拟客户端、伪造数据、可疑鼠标动作等不安全的终端将不会通过人机验证。
为了验证安全性,VAPTCHA的工程师们对包含VAPTCHA的各种类型验证码进行了严格的破解测试。对比结果后可以得出结论:目前为止,VAPTCHA是世界上最不可能被破解的人机验证系统。

VAPTCHA被攻击会影响我的网站验证吗?什么是宕机模式?

为了预防VAPTCHA被攻击而影响接入网站的正常人机验证请求,我们做了充分的防护措施,就算在极低概率下发生VAPTCHA服务器群因为被攻击而宕机也不会影响接入网站的验证服务。程序一旦检测到这种情况发生即进入短暂的 宕机验证模式,直到VAPTCHA服务器被修复。在宕机模式下,由接入网站服务器配合预先配置的缓存验证码来进行人机验证,仅仅是略微降低了用户体验,网站安全仍然能得到保障。 宕机模式下的验证方式将暂时切换到字符验证的模式,不用担心的是,VAPTCHA的字符验证码经过特殊处理,自动化程序仍然极难破解。
宕机模式验证流程
宕机模式验证码举例
  • 在极低概率下,当异常情况(如VAPTCHA服务器群全部宕机、请求超时等)发生时,则自动进入宕机自验证模式。实现对接入网站的全天候防护。

服务条款

我们收集哪些信息

为了向你提供更好、更安全的验证服务,我们将根据需要收集如下信息:
用于注册的信息。 当你在VAPTCHA创建账户时,你需要像我们提供手机号或邮箱信息(如果是第三方登录账号则是第三方网站授权的信息,如:头像、昵称)。
用于人机验证的信息。 当你的网站通过VAPTCHA进行人机验证服务时,我们会收集当前被验证用户所使用设备的相关信息,这些设备信息包括:设备属性信息(如设备型号、操作系统版本、设备设置、唯一 设备标识符等软硬件特征信息)、设备位置信息(如通过GPS、蓝牙或WIFI信号获得的位置信息)、设备连接信息(IP地址、浏览器的类型、电信运营商、使用的语言、访问日期和时间及您需求的网页记录等) 同时为了进行人机行为特征判断,我们还会收集用户在验证过程中的鼠标轨迹、加速度、停顿等行为信息以及被验证用户的浏览器Cookie或者类似信息。

免责声明

VAPTCHA提供世界上最安全的人机验证服务(远远优于其他人机验证解决方案),上线之前我们对VAPTCHA进行了严格的破解测试(暴力破解、撞库测试、算法识别等)、超高并发压力测试、DDOS攻击测试( 就算VPATCHA验证服务器群全部宕机的情况下,VAPTCHA独有的宕机验证策略仍然具有卓越的安全性全天候保护你的网站安全)。在使用VAPTCHA服务过程中,你需要妥善保管好你的账户信息及验证秘钥SecretKey, 如果因为这些信息的遗失导致的网站安全问题,VAPTCHA不承担任何责任。
用户上传的自定义验证背景图,若上传的验证图涉嫌侵权、违规等,VAPTCHA不承担任何连带责任。

权利保留

为了加强VAPTCHA的安全性,我们会在不另行通知的前提下对已有验证算法、方法进行持续升级,以及在不侵犯接入网站或应用安全性的前提下变更用户信息收集策略;
在检测到接入网站遇到重大安全性挑战时,我们有权利临时性提升验证难度(如对手势匹配率进行提升)或其他安全的验证替代方案,直到当前网站不再受到攻击;
原则上VAPTCHA是免费的,仅对有定制需求或者对VAPTCHA的服务器及带宽资源占用过大的用户收取相应费用,同时我们保留将验证背景更换成广告图或其他盈利策略的权利;
根据需要,我们有权对服务条款进行合理修改和调整并不另行通知。