首页后端开发JAVAKgCaptcha验证的那些事

KgCaptcha验证的那些事

时间2023-04-25 19:30:02发布访客分类JAVA浏览564
导读:前言针对KgCaptcha验证码,当用户点击完成验证,系统进行风险评估,根据风险程度进行验证,并返回结果。下面是我对前/后端验证的分析。代码接入HTML代码<script src="captcha.js?appid=xxx">&...

前言

针对KgCaptcha验证码,当用户点击完成验证,系统进行风险评估,根据风险程度进行验证,并返回结果。下面是我对前/后端验证的分析。

代码接入

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}
    ";

}
    

验证/验签分析

时间监测

  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 条错误记录

最后

SDK开源地址:https://github.com/KgCaptcha,顺便做了一个演示:https://www.kgcaptcha.com/demo/

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

验证码pythonphp

若转载请注明出处: KgCaptcha验证的那些事
本文地址: https://pptw.com/jishu/8548.html
SaaS电子病历系统源码 KgCaptcha验证码实现笔记

游客 回复需填写必要信息