博客列表 >使用验证码拦截爬虫和机器人实践分享

使用验证码拦截爬虫和机器人实践分享

原创
2023年04月04日 15:34:09507浏览

背景

在很多时候我们都会遇到验证码的多种场景,不同的产品也会使用不同的登录验证方式。

在项目开发中,我将KgCaptcha应用到搜索和分页中,下面是我写的的记录。

开发过程

1、页面创建一个搜索表单

  1. <form name="search" method="post" id="searchForm">
  2. <input type="hidden" name="page" value="" />
  3. <ol class="word"><input type="text" name="word" value="" maxlength="30" /></ol>
  4. <ol class="submit"><input type="submit" name="" value="" />
  5. </form>

2、接入KgCaptcha

  1. <script src="captcha.js?appid=xxx"></script>
  2. <script>
  3. kg.captcha({
  4. // 绑定弹窗按钮
  5. button: "#captchaButton",
  6. // 验证成功事务处理
  7. success: function (e) {
  8. // 验证成功,直接提交表单
  9. console.log(e);
  10. $('#kgCaptchaToken').val(e["token"])
  11. setTimeout(() => {
  12. $('form[name=search]').submit()
  13. }, 500);
  14. },
  15. // 验证失败事务处理
  16. failure: function (e) {
  17. console.log(e);
  18. },
  19. });
  20. </script>
  21. <a id="captchaButton" hidden>点击弹出验证窗口</a>
  22. <input type="hidden" name="kgCaptchaToken" id="kgCaptchaToken" value=""/>

3、弹出验证窗口按钮

将表单提交绑定到id为captchaButton的弹出验证窗口按钮,当点击搜索,表单提交时,弹出验证窗口,待用户验证成功显示搜索结果。

4、分页限制

首次搜索,需要弹出验证;
第一页和第三页之后,需要弹出验证;
其余不需要验证的页码,直接显示搜索结果;

  1. if (page=='' || page=='1' || page > '3') {
  2. $('#captchaButton').click()
  3. }

5、后端代码

后端根据当前页码,对提交的kgCaptchaToken进行验证,验证通过显示搜索结果;

  1. <?php
  2. if ($_POST['page']=='' || $_POST['page']=='1' || $_POST['page'] > '3') {
  3. include "KgCaptcha/KgCaptchaSDK.php";
  4. // 填写你的 AppId,在应用管理中获取
  5. $appId = "xxx";
  6. // 填写你的 AppSecret,在应用管理中获取
  7. $appSecret = "xxx";
  8. $request = new kgCaptcha($appId, $appSecret);
  9. // 填写应用服务域名,在应用管理中获取
  10. $request->appCdn = "https://cdn.kgcaptcha.com";
  11. // 前端验证成功后颁发的 token,有效期为两分钟
  12. $request->token = $_POST["kgCaptchaToken"];
  13. // 当安全策略中的防控等级为3时必须填写
  14. $request->userId = "kgCaptchaDemo";
  15. // 请求超时时间,秒
  16. $request->connectTimeout = 10;
  17. $requestResult = $request->sendRequest();
  18. if ($requestResult->code === 0) {
  19. // 验签成功逻辑处理
  20. // 输出搜索结果
  21. ...
  22. } else {
  23. // 验签失败逻辑处理
  24. // 失败,提示错误并跳转页面
  25. msgbox("验证失败,错误信息:{$requestResult->msg}",'search.php');
  26. return false;
  27. }
  28. } else {
  29. // 输出搜索结果
  30. ...
  31. }
  32. ?>

最后

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

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