图形验证码服务接入(二)防水墙接入

业务流程时序图

防水墙业务时序图

1)客户端完成初始化
2)用户完成验证
3)获取验证结果(ticket/randstr)
4)回传服务端对票据进行合法性校验

接入方法

服务端

服务端接入,可参考 官方文档

服务端仅需要对前端验证完成后获取的参数,进行校验即可。

票据校验接口:GET https://ssl.captcha.qq.com/ticket/verify

下面是使用 superagent 请求库封装的的验证方法。

  public async verify(params:VerifyParams) {
    const response = await superagent
      .get(this.base_URL)
      .query({
        aid: this.aid,
        AppSecretKey: this.secret_key,
        Ticket: params.ticket,
        Randstr: params.randstr,
        UserIP: params.user_ip,
      })
      .send();

      const result = JSON.parse(response.text);

      const res_code = +(result.response);

      let is_pass = false;
      switch (res_code) {
        case 0:
          is_pass = false;
          break;

        case 1:
          is_pass = true;
          break;
      
        default:
          is_pass = false;
          break;
      }

      return is_pass;
  }

Web端接入

防水墙客户端接入方式比较丰富。

主要有两种,第一种是通过生成验证码对象,进行验证码的操作;第二种是自动注入事件到DOM节点。

对于有特殊需求的场景(比如,需要控制验证码的显示与隐藏)建议使用第一种。

首先引入防水墙的 JS SDK 文件。

  <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>

方式一 操作验证码对象

1)初始化对象

// 初始化对象 方法1
const captcha1 = new TencentCaptcha('appId', function(res) {/* callback */});

// 初始化对象 方法2
const captcha1 = new TencentCaptcha(
    document.getElementById('TencentCaptcha'),
    'appId',
    function(res) {/* callback */},
    { bizState: '自定义透传参数' }
);

// 初始化对象 方法3
// 绑定一个元素并自动识别场景id和回调
// 验证码会读取dom上的`data-appid`和`data-cbfn`以及`data-biz-state`(可选)自动初始化
const captcha1 = new TencentCaptcha(document.getElementById('TencentCaptcha'));

当初始化对象时,传入DOM节点时,Captcha 对象会给当前节点注册 click 事件,点击DOM节点时,会显示验证码。

2)显示验证码

captcha1.show(); // 显示验证码

方式二 自动注入事件

1)注册节点

<button id="TencentCaptcha" data-appid="appId" data-cbfn="callback">验证</button>

2)将 data-cbfn 中命名的回调注册到全局中(侵入性真大 (╯°□°)╯︵┻━┻)

    window.callback = function (res) {
      console.log(res)
      // res(未通过验证)= {ret: 1, ticket: null}
      // res(验证成功) = {ret: 0, ticket: "String", randstr: "String"}
      if (res.ret === 0) {
        console.log('验证成功');
        const { ticket, randstr } = res;

        $.ajax({
          type: 'get',
          url: 'http://localhost:4000/waterproof-wall/validate',
          data: {
            ticket,
            randstr,
          },
          success: (res) => {
            console.log('验证成功', res);
          },
        });

      } else if (res.ret == 1) {
        console.log('验证失败');
      }
    };

需要注意的地方

本地接入测试时,极容易被防水墙的安全策略误伤,导致无法完成验证。因此,在本地开发时,可以将「恶意安全等级」调成「体验优先」。

配置路径:
后台 -> 配置中心 -> 安全配置 -> 恶意拦截等级

安全配置

总结

防水墙的接入文档非常详细、接入方式也较为简单,而且免费。
缺点是,防水墙处于推广阶段,每小时只有2000次安全防护。而且验证码服务出现问题时,不能快速联系到客服人员进行排查问题。
对于个人网站而言,防水墙已能满足需求。但是对于商业用户还是推荐服务较为稳定的商业付费服务。

相关系列文章

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容