代码接入
HTML代码
<script src=34;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代码
<?phpinclude "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}";}
验证/验签剖析
韶光监测
页面载入离当前韶光超过20分钟,有可能客户端韶光禁绝确第一次点击和末了一次点时时间过长,秒第一次点击和末了一次点时时间过快,秒
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 条缺点记录