关于验证码:KgCaptcha验证的那些事

3次阅读

共计 2201 个字符,预计需要花费 6 分钟才能阅读完成。

01 前言

针对 KgCaptcha 验证码,当用户点击实现验证,零碎进行危险评估,依据危险水平进行验证,并返回后果。上面是我对前 / 后端验证的剖析。

02 代码接入

HTML 代码

<script src="captcha.js?appid=xxx"></script>
<script>
kg.captcha({
    // 绑定元素,验证框显示区域
    bind: "#captchaBox",
    // 验证胜利事务处理
    success: function(e) {console.log(e);
    },
    // 验证失败事务处理
    failure: function(e) {console.log(e);
    },
    // 点击刷新按钮时触发
    refresh: function(e) {console.log(e);
    }
});
</script>
<div id="captchaBox"> 载入中 ...</div>

PHP 代码

<?php
include "public/KgCaptchaSDK.php";
// 填写你的 AppId,在利用治理中获取
$appId = "xxx";
// 填写你的 AppSecret,在利用治理中获取
$appSecret = "xxx";
$request = new kgCaptcha($appId, $appSecret);
// 填写应用服务域名,在利用治理中获取
$request->appCdn = "https://cdn.kgcaptcha.com";
// 前端验证胜利后颁发的 token,有效期为两分钟
$request->token = $_POST["kgCaptchaToken"];
// 当安全策略中的防控等级为 3 时必须填写
$request->userId = "kgCaptchaDemo";
// 申请超时工夫,秒
$request->connectTimeout = 10;
$requestResult = $request->sendRequest();
if ($requestResult->code === 0) {
    // 验签胜利逻辑解决
    echo "验证通过";
} else {
    // 验签失败逻辑解决
    echo "验证失败,错误代码:{$requestResult->code},错误信息:{$requestResult->msg}";
}

03 验证 / 验签剖析

工夫监测

  1. 页面载入离以后工夫超过 20 分钟,有可能客户端工夫不正确
  2. 第一次点击和最初一次点时工夫过长,秒
  3. 第一次点击和最初一次点时工夫过快,秒
if self.auth.data["level"] > 1 and self.POST["type"] not in (10, 11, 12, 13, 14, 15):  # 风控等级,字体辨认和空间推理单次点击不检测间隔时间
    inter = (5, 0.1) if self.POST["type"] in (1, 2) else (12, 0.2)  # 设置拼图 / 文字点击两种不同类型间隔时间
    if abs(self.POST["load"] - self.kg["RUN_TIME"][3]) > self.timeout:  # 超时工夫,JS 载入工夫离过后工夫,秒
        return self.r_code(code=30003)
    if abs(self.POST["end"] - self.POST["start"]) > inter[0]:
        return self.r_code(code=30004)
    if abs(self.POST["end"] - self.POST["start"]) < inter[1]:
        return self.r_code(code=30005)

去路域名检测

if not self.kg["HTTP_REFERER"]: return self.r_code(30006)  # 域名不非法,无奈获取去路域名
if not self.auth.domain_auth(): return self.r_code(30007)  # 起源域名未受权 

验证次数限度检测

excess = self.auth.excess(1)
    if excess:
        return self.r_code(code=[30016, 30017, 30018][excess - 1])

利用无效工夫检测

 validity = self.auth.app_validity()
    if validity[0] == 1: return self.r_code(30009)  # 受权未开始
    if validity[0] == 2: return self.r_code(30010)  # 受权已完结

    if self.auth.app_state(): return self.r_code(30011)  # 以后利用 / 域名被禁用 

客户端 IP 地址

if not is_ip(self.kg["HTTP_ADDR"]): return self.r_code(30012)  # 无奈获取 IP 地址
    ip_list = self.auth.ip_list()
    if ip_list == 1: return self.r_code(30013)  # 黑名单
    if ip_list == 2: return self.r_code(30014)  # 非白名单 

用户在 X 分钟内谬误记录数超过 n 条

if self.auth.data["level"] > 0:
    if not self.auth.risk(): return self.r_code(30015)  # x 分钟内超过 n 条谬误记录 

04 最初

SDK 开源地址:KgCaptcha (KgCaptcha) · GitHub,顺便做了一个演示:凯格行为验证码在线体验

正文完
 0