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

前言

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

开发过程

1、模拟当前为新闻列表。

1

2、前台接入KgCaptcha

1<script src="captcha.js?appid=xxx"></script> 2<script type="text/javascript"> 3kg.captcha({ 4 // 绑定弹窗按钮 5 button: "#captchaButton", 6 // 验证成功事务处理 7 success: function (e) { 8 // 验证成功,直接提交表单 9 console.log(e); 10 document.cookie = "sNum=1"; 11 document.cookie = "sTime="+Math.round(new Date().getTime()/1000); 12 document.getElementById('kgCaptchaToken').value = e['token'] 13 form1.submit(); 14 }, 15 // 验证失败事务处理 16 failure: function (e) { 17 console.log(e); 18 }, 19 // 点击刷新按钮时触发 20 refresh: function (e) { 21 console.log(e); 22 } 23 24 </script> 25 26<a id="captchaButton" style="display: none;">点击弹出验证窗口</a> 27<form method="post" id="form1" name="form1"> 28 <input type="hidden" name="action" value="captcha" /> 29 <input type="hidden" name="kgCaptchaToken" id="kgCaptchaToken" value="" /> 30</form>

2

3、要求

  • 通过cookie监测当前页面访问,指定时间内访问次数超出,则弹出验证码,要求用户验证。
  • 若为首次访问,弹出验证码,要求用户验证。
1// 设置cookie 2window.onload = function() { 3 // 当前时间 4 var cTime = Math.round(new Date().getTime()/1000) 5 // 当前cookie的访问次数 6 var sNum = get_cookie2('sNum') 7 // 当前cookie的上一次访问时间 8 var sTime = get_cookie2('sTime') 9 // 判断cookie是否设置 10 if (sNum==undefined && sTime==undefined) { 11 document.getElementById('captchaButton').click() 12 } else { 13 // 判断访问次数和上一次访问时间 14 if (parseInt(sTime)+10 <= cTime && sNum>9) { 15 document.getElementById('captchaButton').click() 16 } else { 17 if (cTime - sTime < 10) { 18 document.cookie = "sNum="+(parseInt(sNum)+1); 19 document.cookie = "sTime="+sTime; 20 } else { 21 document.cookie = "sNum=1"; 22 document.cookie = "sTime="+cTime; 23 } 24 } 25 } 26} 27 28// 获取cookie的方法 29function get_cookie2(val) { 30 var arr = document.cookie.split(';'); 31 for(var i = 0; i < arr.length; i++){ 32 var arr2 = arr[i].split('='); 33 arr2[0] = arr2[0].replace(/\s*/g,""); 34 if(arr2[0] == val){ 35 return arr2[1] 36 } 37 } 38}

4、后端验证

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

最后

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

双十一预售活动分析

2022年双十一促销活动已经开始,大家应该都提前开始关注今年双十一活动的时间表了吧?2022年10月24日晚8:00天猫双11预售时间,第一波销售时间10月31日晚8:0,第二波销售时间11月10日晚8:00;天猫双11的优惠力度是跨店每满30050

VBox 启动虚拟机失败

在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.