您现在的位置是:首页 > 编程语言学习 > 前端编程语言 > 文章正文 前端编程语言

WordPress给搜索页面展示结果前加一个人机验证码

2022-06-01 13:35:07 前端编程语言

简介WordPress的搜索一直是一个很占内存的功能,如果你的文章很多,那么执行一次搜索会相对卡顿,那么我们如何尽可能的防范一下呢?比如机器人扫...

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

这里,我们可以加一个搜索验证码,用户在第一次搜索时需要进行简单的人机验证。一来这样可以有效防止恶意扫描导致内存崩溃,二来可以防止恶意请求关键字生成结果页面。

模板兔写了一个简单的验证机制,可将下面代码加到主题的functions.php里即可。

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

 

相关文章

站点信息