建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

WordPress如何在显示结果前在搜索页面添加人机验证码?

GG网络技术分享 2025-03-18 16:10 0


WordPress 搜索一直是一个内存密集型功能。 如果你有很多文章,那么执行搜索会比较慢,那么我们怎样才能尽可能地防止它呢? 比如机器人扫描搜索页面,可能会直接导致mysql进程在内存满时被终止。

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

模板兔写一个简单的验证机制,可以在主题的functions.php中加入如下代码。

/*

Plugin Name: 搜索验证码

Plugin URI: https://www.mobantu.com

Description: WordPress 搜索验证码

Version: 1.0

Author: 模板兔

Author URI: https://www.mobantu.com

*/

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="https://www.mobantu.com/<?php echo home_url();?>">返回首页</a>

</body>

</html>

<?php

exit;

}

}

}

}

add_action( 'parse_query', 'esc_search_captcha' );

标签: WordPress op

提交需求或反馈

Demand feedback