
wordpress搜索会增加服务器消耗,竞争对手会利用大量的无意义wordpress搜索来消耗尽你的服务器资源,让你原本轻松胜任的服务器配置,时刻处于卡爆状态。
在网络上找到一个为wordpress搜索增加验证码的代码,但这个代码是有问题的,也就是通过一次人机验证后,就不再验证下一次搜索请求了,这对于想要打击你站点的对手来说,太容易破解了。
所以在DeepSeek-R1满血版的帮助下,优化了这段代码,让它实现每次wordpress搜索都需要验证的功能。
具体的过程就不多说了,直接上代码:
function esc_search_captcha($query) {
if (is_search() && !is_admin() && !is_user_logged_in()) {
session_start(); // 使用服务端session替代cookie存储
// 验证通过后跳过验证
if (isset($_SESSION['search_verified']) && $_SESSION['search_verified'] === true) {
unset($_SESSION['search_verified']); // 单次验证有效
return;
}
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['captcha_result'])) {
if ((int)$_POST['captcha_result'] === $_SESSION['captcha_answer']) {
$_SESSION['search_verified'] = true;
wp_redirect(add_query_arg(null, null));
exit;
} else {
$error_message = '验证码错误,请重试';
}
}
// 生成新验证码
$num1 = rand(10, 99);
$num2 = rand(10, 99);
$_SESSION['captcha_answer'] = $num1 + $num2;
// 加载主题模板保持样式一致
get_header();
?>
<div class="search-captcha-wrapper">
<h2>搜索验证</h2>
<?php if (!empty($error_message)): ?>
<p class="error"><?php echo $error_message; ?></p>
<?php endif; ?>
<form method="post">
<div class="captcha-question">
请计算:<?php echo $num1; ?> + <?php echo $num2; ?> = ?
</div>
<input type="number" name="captcha_result" required
placeholder="输入计算结果" class="captcha-input">
<button type="submit" class="captcha-submit">提交验证</button>
</form>
<p class="notice">为防止机器人滥用,搜索前需完成验证</p>
</div>
<?php
get_footer();
exit;
}
}
add_action('template_redirect', 'esc_search_captcha');
这段代码是放在functions.php里面,但不建议这样做。因为主题升级以后这段代码就没有了,而且如果放置的位置不对,还会让网站受影响。
所以推荐放在一个小插件里面,这个插件可以灵活启用,而且非常简单,这是云落大神写的,你也可以在里面加入其他代码,需要放在functions.php里面生效的代码都可以放在这里面生效。
<?php
/*
Plugin Name: 小插件
Description: 给主题添加点小功能
Author: 云落
*/
//搜索结果填加验证码
function esc_search_captcha($query) {
if (is_search() && !is_admin() && !is_user_logged_in()) {
session_start(); // 使用服务端session替代cookie存储
// 验证通过后跳过验证
if (isset($_SESSION['search_verified']) && $_SESSION['search_verified'] === true) {
unset($_SESSION['search_verified']); // 单次验证有效
return;
}
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['captcha_result'])) {
if ((int)$_POST['captcha_result'] === $_SESSION['captcha_answer']) {
$_SESSION['search_verified'] = true;
wp_redirect(add_query_arg(null, null));
exit;
} else {
$error_message = '验证码错误,请重试';
}
}
// 生成新验证码
$num1 = rand(10, 99);
$num2 = rand(10, 99);
$_SESSION['captcha_answer'] = $num1 + $num2;
// 加载主题模板保持样式一致
get_header();
?>
<div class="search-captcha-wrapper">
<h2>搜索验证</h2>
<?php if (!empty($error_message)): ?>
<p class="error"><?php echo $error_message; ?></p>
<?php endif; ?>
<form method="post">
<div class="captcha-question">
请计算:<?php echo $num1; ?> + <?php echo $num2; ?> = ?
</div>
<input type="number" name="captcha_result" required
placeholder="输入计算结果" class="captcha-input">
<button type="submit" class="captcha-submit">提交验证</button>
</form>
<p class="notice">为防止机器人滥用,搜索前需完成验证</p>
</div>
<?php
get_footer();
exit;
}
}
add_action('template_redirect', 'esc_search_captcha');
?>
把它保存为php格式,打包成zip,在wordpress插件里面安装就行了。

© 版权声明
THE END
暂无评论内容