Blogger Information
Blog 16
fans 0
comment 0
visits 5721
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
使用验证码拦截爬虫和机器人实践分享
Original
506 people have browsed it

背景

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

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

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