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

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

前言

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


开发过程

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

1.PNG

2、前台接入KgCaptcha

<scriptsrc="captcha.js?appid=xxx"></script><scripttype="text/javascript">kg.captcha({
// 绑定弹窗按钮button: "#captchaButton",
// 验证成功事务处理success: function (e) {
// 验证成功,直接提交表单console.log(e);
document.cookie="sNum=1";
document.cookie="sTime="+Math.round(newDate().getTime()/1000);
document.getElementById('kgCaptchaToken').value=e['token']
form1.submit();
    },
// 验证失败事务处理failure: function (e) {
console.log(e);
    },
// 点击刷新按钮时触发refresh: function (e) {
console.log(e);
    }
</script><aid="captchaButton"style="display: none;">点击弹出验证窗口</a><formmethod="post"id="form1"name="form1"><inputtype="hidden"name="action"value="captcha"/><inputtype="hidden"name="kgCaptchaToken"id="kgCaptchaToken"value=""/></form>

2.PNG


3、要求

  • 通过cookie监测当前页面访问,指定时间内访问次数超出,则弹出验证码,要求用户验证。
  • 若为首次访问,弹出验证码,要求用户验证。
// 设置cookiewindow.onload=function() {
// 当前时间varcTime=Math.round(newDate().getTime()/1000)
// 当前cookie的访问次数varsNum=get_cookie2('sNum')
// 当前cookie的上一次访问时间varsTime=get_cookie2('sTime')
// 判断cookie是否设置if (sNum==undefined&&sTime==undefined) {
document.getElementById('captchaButton').click()
    } else {
// 判断访问次数和上一次访问时间if (parseInt(sTime)+10<=cTime&&sNum>9) { 
document.getElementById('captchaButton').click()
        } else {
if (cTime-sTime<10) {
document.cookie="sNum="+(parseInt(sNum)+1);
document.cookie="sTime="+sTime;
            } else {
document.cookie="sNum=1";
document.cookie="sTime="+cTime; 
            }
        }
    }
}
// 获取cookie的方法functionget_cookie2(val) {
vararr=document.cookie.split(';');
for(vari=0; i<arr.length; i++){
vararr2=arr[i].split('=');
arr2[0] =arr2[0].replace(/\s*/g,"");
if(arr2[0] ==val){
returnarr2[1]
        } 
    }
}


4、后端验证

<?phpheader("Content-type:text/html;charset=utf-8");
// 后端验证if (isset($_POST) &&$_POST['action'] =='captcha') {
include"./KgCaptchaSDK.php";
// 填写你的 AppId,在应用管理中获取$appId="xxx";
// 填写你的 AppSecret,在应用管理中获取$appSecret="xxx";
$request=newkgCaptcha($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"<script>alert('验证通过');</script>";
header('location: demo.php');
    } else {
// 验签失败逻辑处理echo"<script>alert('验证失败,错误代码:{$requestResult->code}, 错误信息:{$requestResult->msg}');</script>";
header('location: demo.php');
    }
}
?>


最后

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

相关文章
|
2月前
|
人工智能 前端开发 JavaScript
阿里云安全类云产品,验证码使用时滑动验证流程及线上问题排查
阿里云验证码产品,使用业界先进的风控引擎结合“规则+AI”模型,有效区分真实用户和机器自动化脚本攻击,避免机器请求造成业务损失。主要适用于垃圾注册、刷库撞库,薅羊毛,短信被刷等风险场景。为您提供安全可靠的业务环境。本文为大家介绍验证码使用时滑动验证流程及验证不通过的问题排查。
64820 5
阿里云安全类云产品,验证码使用时滑动验证流程及线上问题排查
|
2月前
|
安全 数据安全/隐私保护
如何设置多因素认证,但不使用短信验证码?
【5月更文挑战第14天】如何设置多因素认证,但不使用短信验证码?
25 0
|
11月前
|
安全 机器人 网络安全
安全防线加固,文字点选验证码来帮忙
为了确保网络安全,我们网站采用了文字点选验证码来验证用户身份。文字点选验证码是一种简单而有效的验证机制,通过要求用户点击相关图像来区分真实用户和机器人。它不仅可以防止恶意攻击,还能提供用户友好的验证体验。
|
2月前
|
数据安全/隐私保护 开发者
关于小游戏用户隐私保护违规警告的处理方案
关于小游戏用户隐私保护违规警告的处理方案
43 0
|
12月前
|
JavaScript API 容器
手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)
手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)
235 1
|
安全 前端开发 程序员
逻辑漏洞中一些自己总结关于验证码的漏洞挖掘
逻辑漏洞中一些自己总结关于验证码的漏洞挖掘
423 0
|
安全 开发工具
KgCaptcha 行为验证码安全策略设置
在验证码项目中,都会遇到验证码被恶意大量高频的调用,给服务造成很多无效的注册或登录,占用大量的系统资源。
KgCaptcha 行为验证码安全策略设置
|
开发工具
KgCaptcha 语序识别验证码请求日志记录
请求日志记录是一个非常普遍的功能,几乎可以涉及到所有的项目。所以一个方便使用的日志记录,将会方便日后的管理,于是我通过使用 KgCaptcha 在我的验证码项目中实现。
KgCaptcha 语序识别验证码请求日志记录
KgCaptcha 行为验证码自定义语言/预警信息设置
KgCaptcha 行为验证码自定义语言/预警信息设置
KgCaptcha 行为验证码自定义语言/预警信息设置
|
前端开发
预防“短信轰炸机”,你可以接入KgCaptcha来帮你
最近收到leader的一个邮件说我们的项目有短信轰炸风险。顿时让做技术开发的人为之一颤。今天给大家分享一个解决这个问题的方法。就是凯格科技的 KgCaptcha 进行验证码生成和校验。闲话少说直接上代码。
预防“短信轰炸机”,你可以接入KgCaptcha来帮你

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    27
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    27
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    27
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    28
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    25
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    31
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    23
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    21
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    21
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    20