KgCaptcha验证的那些事

01 前言

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

2

02 代码接入

HTML代码

1<script src="captcha.js?appid=xxx"></script> 2<script> 3kg.captcha({ 4 // 绑定元素,验证框显示区域 5 bind: "#captchaBox", 6 // 验证成功事务处理 7 success: function(e) { 8 console.log(e); 9 }, 10 // 验证失败事务处理 11 failure: function(e) { 12 console.log(e); 13 }, 14 // 点击刷新按钮时触发 15 refresh: function(e) { 16 console.log(e); 17 } 18}); 19</script> 20<div id="captchaBox">载入中 ...</div>

PHP代码

1<?php 2include "public/KgCaptchaSDK.php"; 3// 填写你的 AppId,在应用管理中获取 4$appId = "xxx"; 5// 填写你的 AppSecret,在应用管理中获取 6$appSecret = "xxx"; 7$request = new kgCaptcha($appId, $appSecret); 8// 填写应用服务域名,在应用管理中获取 9$request->appCdn = "https://cdn.kgcaptcha.com"; 10// 前端验证成功后颁发的 token,有效期为两分钟 11$request->token = $_POST["kgCaptchaToken"]; 12// 当安全策略中的防控等级为3时必须填写 13$request->userId = "kgCaptchaDemo"; 14// 请求超时时间,秒 15$request->connectTimeout = 10; 16$requestResult = $request->sendRequest(); 17if ($requestResult->code === 0) { 18 // 验签成功逻辑处理 19 echo "验证通过"; 20} else { 21 // 验签失败逻辑处理 22 echo "验证失败,错误代码:{$requestResult->code}, 错误信息:{$requestResult->msg}"; 23}

03 验证/验签分析

时间监测

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

来路域名检测

1if not self.kg["HTTP_REFERER"]: return self.r_code(30006) # 域名不合法,无法获取来路域名 2if not self.auth.domain_auth(): return self.r_code(30007) # 来源域名未授权

验证次数限制检测

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

应用有效时间检测

1 validity = self.auth.app_validity() 2 if validity[0] == 1: return self.r_code(30009) # 授权未开始 3 if validity[0] == 2: return self.r_code(30010) # 授权已结束 4 5 if self.auth.app_state(): return self.r_code(30011) # 当前应用/域名被禁用

客户端IP地址

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

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

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

04 最后

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

点赞
收藏

评论区

加载中...

相关推荐

使用验证码拦截爬虫和机器人实践分享

在很多时候我们都会遇到验证码的多种场景,不同的产品也会使用不同的登录验证方式。在项目开发中,我将KgCaptcha应用到搜索和分页中,下面是我写的的记录。

[验证码] KgCaptcha风险监测方法

“访问过于频繁,请先完成验证”,相信大家对这句话应该不陌生。当我们访问一个网站过于频繁时,就会弹出这样的提示,甚至于让我们先通过滑动验证码。

免费的Python验证码

在提交表单的时候为了防止机器操作或者是恶意的攻击,在填写表单的时候一般都用验证码来过滤掉一些非法提交数据。今天给大家介绍一款超实用超漂亮的Python验证码库:KgCaptcha。

图形验证码无痕刷新

在不刷新浏览器的情况下,实现页面的刷新。本文采用KgCaptcha验证码,实现无痕刷新验证码,下面是总结验证码不同情形下刷新的方法。

行为验证码小图标修改

最近行为验证码在很多网站逐步流行起来,对用户体验来说,比较新颖,操作简单。下面我以滑动拼图验证码和文字点选验证码为例,通过KgCaptcha来说说如何修改验证码中的图标。

保证数据安全,从行为验证码开始!

背景保证数据安全是当今互联网时代的重要任务。为了应对日益复杂的网络攻击,行为验证码应运而生。行为验证码通过分析用户在网站上的行为模式,识别正常用户并阻止恶意活动。它不仅提供了更强大的身份确认方式,还能有效减少伪造身份和破解账户的风险。从行为验证码开始,我们