針對(duì)KgCaptcha驗(yàn)證碼,當(dāng)用戶(hù)點(diǎn)擊完成驗(yàn)證,系統(tǒng)進(jìn)行風(fēng)險(xiǎn)評(píng)估,根據(jù)風(fēng)險(xiǎn)程度進(jìn)行驗(yàn)證,并返回結(jié)果。下面是我對(duì)前/后端驗(yàn)證的分析。
HTML代碼
<script src="captcha.js?appid=xxx"></script>
<script>
kg.captcha({
// 綁定元素,驗(yàn)證框顯示區(qū)域
bind: "#captchaBox",
// 驗(yàn)證成功事務(wù)處理
success: function(e) {
console.log(e);
},
// 驗(yàn)證失敗事務(wù)處理
failure: function(e) {
console.log(e);
},
// 點(diǎn)擊刷新按鈕時(shí)觸發(fā)
refresh: function(e) {
console.log(e);
}
});
</script>
<div id="captchaBox">載入中 ...</div>
PHP代碼
<?php
include "public/KgCaptchaSDK.php";
// 填寫(xiě)你的 AppId,在應(yīng)用管理中獲取
$appId = "xxx";
// 填寫(xiě)你的 AppSecret,在應(yīng)用管理中獲取
$appSecret = "xxx";
$request = new kgCaptcha($appId, $appSecret);
// 填寫(xiě)應(yīng)用服務(wù)域名,在應(yīng)用管理中獲取
$request->appCdn = "https://cdn.kgcaptcha.com";
// 前端驗(yàn)證成功后頒發(fā)的 token,有效期為兩分鐘
$request->token = $_POST["kgCaptchaToken"];
// 當(dāng)安全策略中的防控等級(jí)為3時(shí)必須填寫(xiě)
$request->userId = "kgCaptchaDemo";
// 請(qǐng)求超時(shí)時(shí)間,秒
$request->connectTimeout = 10;
$requestResult = $request->sendRequest();
if ($requestResult->code === 0) {
// 驗(yàn)簽成功邏輯處理
echo "驗(yàn)證通過(guò)";
} else {
// 驗(yàn)簽失敗邏輯處理
echo "驗(yàn)證失敗,錯(cuò)誤代碼:{$requestResult->code}, 錯(cuò)誤信息:{$requestResult->msg}";
}
時(shí)間監(jiān)測(cè)
if self.auth.data["level"] > 1 and self.POST["type"] not in (10, 11, 12, 13, 14, 15): # 等級(jí),字體識(shí)別和空間推理單次點(diǎn)擊不檢測(cè)間隔時(shí)間
inter = (5, 0.1) if self.POST["type"] in (1, 2) else (12, 0.2) # 設(shè)置拼圖/文字點(diǎn)擊兩種不同類(lèi)型間隔時(shí)間
if abs(self.POST["load"] - self.kg["RUN_TIME"][3]) > self.timeout: # 超時(shí)時(shí)間,JS載入時(shí)間離當(dāng)時(shí)時(shí)間,秒
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)
來(lái)路域名檢測(cè)
if not self.kg["HTTP_REFERER"]: return self.r_code(30006) # 域名不合法,無(wú)法獲取來(lái)路域名
if not self.auth.domain_auth(): return self.r_code(30007) # 來(lái)源域名未授權(quán)
驗(yàn)證次數(shù)限制檢測(cè)
excess = self.auth.excess(1)
if excess:
return self.r_code(code=[30016, 30017, 30018][excess - 1])
應(yīng)用有效時(shí)間檢測(cè)
validity = self.auth.app_validity()
if validity[0] == 1: return self.r_code(30009) # 授權(quán)未開(kāi)始
if validity[0] == 2: return self.r_code(30010) # 授權(quán)已結(jié)束
if self.auth.app_state(): return self.r_code(30011) # 當(dāng)前應(yīng)用/域名被禁用
客戶(hù)端IP地址
if not is_ip(self.kg["HTTP_ADDR"]): return self.r_code(30012) # 無(wú)法獲取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) # 非白名單
用戶(hù)在X分鐘內(nèi)錯(cuò)誤記錄數(shù)超過(guò)n條
if self.auth.data["level"] > 0:
if not self.auth.risk(): return self.r_code(30015) # x 分鐘內(nèi)超過(guò) n 條錯(cuò)誤記錄
SDK開(kāi)源地址:KgCaptcha (KgCaptcha) · GitHub,順便做了一個(gè)演示:凱格行為驗(yàn)證碼在線(xiàn)體驗(yàn)
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)