为 WordPress 搜索添加人机验证

  • 一一得一
  • 技术分享
  • Jul 02, 2022

WordPress的搜索一直是一个很占内存的功能,如果你的文章很多,那么执行一次搜索会相对卡顿,那么我们如何尽可能的防范一下呢?比如机器人扫描到了搜索页面,那将可能直接导致内存爆满mysql进程被终止。

我们可以加一个简单的搜索验证机制,用户在第一次搜索时需要进行简单的人机验证。一来这样可以有效防止恶意扫描导致内存崩溃,二来可以防止恶意请求关键字生成结果页面。文章源自知更鸟-https://zmingcx.com/search-captcha-for-wordpress.html

可将下面代码加到主题的functions.php里即可。文章源自知更鸟-https://zmingcx.com/search-captcha-for-wordpress.html

文章源自知更鸟-https://zmingcx.com/search-captcha-for-wordpress.htm

文章源自知更鸟-https://zmingcx.com/search-captcha-for-wordpress.html

 
  1. function esc_search_captcha( $query, $error = true ) {
  2. if ( is_search() && !is_admin() ) {
  3. if ( ! isset( $_COOKIE['esc_search_captcha'] ) ) {
  4. $query->is_search = false;
  5. $query->query_vars['s'] = false;
  6. $query->query['s'] = false;
  7.  
  8. if ( $error == true ){
  9. //$query->is_404 = true;
  10. if ( isset( $_POST['result'] ) ) {
  11. if ( $_POST['result'] == $_COOKIE['result'] ) {
  12. $_COOKIE['esc_search_captcha'] = 1;
  13. setcookie('esc_search_captcha',1,0,'/');
  14. echo '<script>location.reload();</script>';
  15. }
  16. }
  17.  
  18. $num1 = rand(1,50);
  19. $num2 = rand(1,50);
  20. $result = $num1+$num2;
  21. $_COOKIE['result'] = $result;
  22. setcookie('result',urldecode($result),0,'/');
  23. ?>
  24.  
  25. <html>
  26. <head>
  27. <meta charset="UTF-8">
  28. <title>人机验证</title>
  29. <style>
  30. body{color: #333;text-align: center;font-size: 16px;}
  31. .erphp-search-captcha{margin: 50px auto 15px;max-width: 250px;width: 100%;padding: 40px 20px;border: 1px solid #ddd;text-align: center;border-radius: 5px;}
  32. .erphp-search-captcha form{margin: 0}
  33. .erphp-search-captcha input{border: none;border-bottom: 1px solid #666;width: 50px;text-align: center;font-size: 16px;}
  34. .erphp-search-captcha input:focus{outline: none;}
  35. .erphp-search-captcha button{border: none;background: transparent;color: #ff5f33;cursor: pointer;}
  36. .erphp-search-captcha button:focus{outline: none;}
  37. a{color: #000;font-size: 12px;}
  38. </style>
  39. </head>
  40. <body>
  41. <div class="erphp-search-captcha">
  42. <form action="" method="post"><?php echo $num1;?> + <?php echo $num2;?> = <input type="text" name="result" required /> <button type="submit">验证</button></form>
  43. </div>
  44. <a href="<?php echo home_url();?>">返回首页</a>
  45. </body>
  46. </html>
  47. <?php
  48. exit;
  49. }
  50. }
  51. }
  52. }
  53. add_action( 'parse_query', 'esc_search_captcha' );

 

文章源自知更鸟-https://zmingcx.com/search-captcha-for-wordpress.html

如果没有使用第三方的搜索,为WP默认搜索加个验证,还是非常必要的,效果可以看本站搜索。验证过一次后,只有清空浏览器 cookie 才会需要再次验证。

打赏