Blogger Information
Blog 16
fans 0
comment 0
visits 5664
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
[验证码] KgCaptcha风险监测方法
Original
223 people have browsed it

前言

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

开发过程

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,顺便做了一个演示:凯格行为验证码在线体验

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post