wordpress及子比主题的搜索功能:防范内存占用恶意留痕问题

在使用 WordPress 搭建网站的过程中,搜索功能可能会带来一些困扰,尤其是内存占用过高的问题。当网站文章数量众多或搜索页面遭受恶意行为时,搜索操作可能会导致卡顿甚至系统崩溃。若是遇到恶意留痕,这搜索页面简直是就是帮凶,本文将介绍一种通过添加搜索验证码来优化WordPress搜索功能的方法。

一、问题分析

  1. 搜索卡顿与内存爆满
  • 随着网站内容的增加,WordPress 的搜索功能可能会变得越来越缓慢。当进行搜索操作时,系统需要遍历大量的文章数据,这会消耗大量的内存资源。
  • 如果同时有多个用户进行搜索或者遭受机器人的恶意扫描,内存占用可能会迅速升高,导致系统卡顿甚至崩溃。
  1. 恶意扫描的危害
  • 机器人可能会大规模、无节制地扫描搜索页面,这不仅会消耗大量的系统资源,还可能导致内存崩溃。
  • 恶意请求关键字生成结果页面也会消耗大量的系统资源,影响网站的正常运行。
  1. 被他人恶意留痕导致搜索引擎收录搜索页违规词
  • 如果有人恶意在搜索页面输入违规词并进行搜索,可能会导致搜索引擎收录这些包含违规词的搜索页面,这会给网站带来不良影响,甚至可能导致网站被处罚。

二、解决方案:添加搜索验证码

为了解决上述问题,我们可以采取添加搜索验证码的方法。当用户首次进行搜索时,要求其完成简单的人机验证。这样可以有效地阻止恶意扫描行为、恶意请求恶意留痕,提升搜索功能的安全性与稳定性。

原版代码(来自模板兔,原文地址在文末):

图片[1]-wordpress及子比主题的搜索功能:防范内存占用恶意留痕问题-王先生笔记
function esc_search_captcha( $query, $error = true ) {
if (is_search() && !is_admin()) {
if(!isset($_COOKIE['esc_search_captcha'])){
$query->is_search = false;
$query->query_vars['s'] = false;
$query->query['s'] = false;
if ( $error == true ){
//$query->is_404 = true;
if(isset($_POST['result'])){
if($_POST['result'] == $_COOKIE['result']){
$_COOKIE['esc_search_captcha'] = 1;
setcookie('esc_search_captcha',1,0,'/');
echo '<script>location.reload();</script>';
}
}

$num1 = rand(1,50);
$num2 = rand(1,50);
$result = $num1+$num2;
$_COOKIE['result'] = $result;
setcookie('result',urldecode($result),0,'/');
?>
<html>
<head>
<meta charset="UTF-8">
<title>人机验证</title>
<style>
body{color: #333;text-align: center;font-size: 16px;}
.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;}
.erphp-search-captcha form{margin: 0}
.erphp-search-captcha input{border: none;border-bottom: 1px solid #666;width: 50px;text-align: center;font-size: 16px;}
.erphp-search-captcha input:focus{outline: none;}
.erphp-search-captcha button{border: none;background: transparent;color: #ff5f33;cursor: pointer;}
.erphp-search-captcha button:focus{outline: none;}
a{color: #000;font-size: 12px;}
</style>
</head>
<body>
<div class="erphp-search-captcha">
<form action="" method="post"><?php echo $num1;?> + <?php echo $num2;?> = <input type="text" name="result" required /> <button type="submit">验证</button></form>
</div>
<a href="<?php echo home_url();?>">返回首页</a>
</body>
</html>
<?php
exit;
}
}
}
}
add_action( 'parse_query', 'esc_search_captcha' );

适用于子比主题的美化代码(王先生笔记修改):

图片[2]-wordpress及子比主题的搜索功能:防范内存占用恶意留痕问题-王先生笔记

将上方其中第一个代码粘贴到function.php最尾部即可

子比主题,在主题根目录创建func.php文件(若已经有了,当我没说),顶部添加<?php(若已经有了,当我没说),再添加第二种代码

三、逻辑分析

  1. 用户未设置验证码 Cookie 时
  • 当用户访问搜索页面且未设置搜索验证码的 Cookie 时,系统会阻止搜索操作。将搜索查询对象的相关属性设置为false,这样就不会执行实际的搜索。
  • 然后,系统生成两个随机数,并计算它们的和。将结果存储在 Cookie 中,并显示人机验证页面,要求用户计算两个随机数的和并输入结果进行验证。
  1. 用户提交表单时
  • 如果用户提交了表单,系统会检查用户输入的结果是否与生成的结果一致。如果一致,则设置 Cookie 并刷新页面,此时用户可以进行搜索操作。
  • 如果不一致,用户需要重新输入正确的结果进行验证。
  1. 前端输入框判断
  • 在页面中添加了 JavaScript 代码,用于在前端进行输入框值的判断。如果输入框为空或输入的值不是数字,则阻止表单提交并显示相应的提示信息。
  • 这样可以确保用户输入的是有效的计算结果,提高验证的准确性。

通过这种逻辑,搜索验证码功能可以有效地筛选出真实的用户请求,阻止恶意扫描、恶意请求和恶意留痕,从而保障内存的稳定使用,提升搜索功能的安全性与稳定性。

四、总结

通过添加搜索验证码的方法,我们可以有效地优化WordPress的搜索功能,防范内存占用问题。同时,还可以防止被他人恶意留痕导致搜索引擎收录搜索页违规词的情况发生。这种方法逻辑清晰,实现相对简单,只需要在主题的functions.php文件中添加相应的代码即可。希望本文对大家在优化 WordPress 搜索功能方面有所帮助。

参考:

https://www.mobantu.com/9287.html

原文链接(非王先生笔记发布均为盗版):https://wxsnote.cn/5636.html

评论后可接收该文章的更新邮箱通知
友情赞助

如果你喜欢我的内容,可以赞助我哦!你的一点点心意,是我不断前进的动力!
温馨提示: 本文最后更新于2025-12-08 13:39:27,某些文章具有时效性,若有错误或已失效,请在下方留言或加入QQ群: 399019539 联系群主反馈。注意一些链接无法访问可能是你网络的原因,如Github,并非资源地址失效。
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
相关推荐
评论 共13条

请登录后发表评论

    请登录后查看评论内容

王先生笔记