博客列表 >[验证码] KgCaptcha风险监测方法

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

原创
2023年04月04日 16:07:45226浏览

前言

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

开发过程

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

2、前台接入KgCaptcha

  1. <script src="captcha.js?appid=xxx"></script>
  2. <script type="text/javascript">
  3. kg.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. </script>
  24. <a id="captchaButton" style="display: none;">点击弹出验证窗口</a>
  25. <form method="post" id="form1" name="form1">
  26. <input type="hidden" name="action" value="captcha" />
  27. <input type="hidden" name="kgCaptchaToken" id="kgCaptchaToken" value="" />
  28. </form>

3、要求

  • 通过cookie监测当前页面访问,指定时间内访问次数超出,则弹出验证码,要求用户验证。
  • 若为首次访问,弹出验证码,要求用户验证。
  1. // 设置cookie
  2. window.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. // 获取cookie的方法
  28. function get_cookie2(val) {
  29. var arr = document.cookie.split(';');
  30. for(var i = 0; i < arr.length; i++){
  31. var arr2 = arr[i].split('=');
  32. arr2[0] = arr2[0].replace(/\s*/g,"");
  33. if(arr2[0] == val){
  34. return arr2[1]
  35. }
  36. }
  37. }

4、后端验证

  1. <?php
  2. header("Content-type:text/html;charset=utf-8");
  3. // 后端验证
  4. if (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. ?>

最后

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

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议