香港/韩国云服务器、独立服务器租用

WordPress限制搜索页面频率防止刷搜索页,免插件

自营机房/高防服务器/高防VPS/美国高防/洛杉矶VPS/洛杉矶高防服务器

CPU负载升高次数有点多,检查日志是有IP刷搜索页面,网上找了下代码记录下来,方便下次参考。

修改主题文件functions.php,添加如下代码:

/** 限制的搜索频次  */
function limit_search_frequency() {
    // 如果当前页面不是搜索页面,则不进行频次限制
    if (!is_search()) {
        return;
    }
    // 设置限制的搜索频次
    $search_frequency = 11; // 每分钟允许的搜索请求次数
    // 检查用户角色
    $user = wp_get_current_user();
    $user_roles = $user->roles;
    // 如果用户角色包含管理员角色,则不进行频次限制
    if (in_array('administrator', $user_roles)) {
        return;
    }
    // 获取当前时间戳
    $current_time = time();
    // 获取存储搜索请求次数和时间戳的 cookie 键名
    $cookie_name = 'search_frequency';
    $cookie_data = isset($_COOKIE[$cookie_name]) ? json_decode(stripslashes($_COOKIE[$cookie_name]), true) : array();
    // 如果没有 cookie 数据,则创建一个新的
    if (empty($cookie_data)) {
        $cookie_data = array(
            'timestamp' => $current_time,
            'count' => 1
        );
        setcookie($cookie_name, json_encode($cookie_data), $current_time + 60, '/');
    } else {
        // 如果存在 cookie 数据,则更新时间戳和搜索请求次数
        $timestamp = $cookie_data['timestamp'];
        $count = $cookie_data['count'];
        // 如果当前时间戳与上次搜索的时间戳之差大于 60 秒,则重置搜索请求次数为 1,并更新时间戳
        if (($current_time - $timestamp) > 60) {
            $count = 1;
            $timestamp = $current_time;
        } else {
            // 否则,递增搜索请求次数
            $count++;
        }
        // 更新 cookie 数据
        $cookie_data = array(
            'timestamp' => $timestamp,
            'count' => $count
        );
        setcookie($cookie_name, json_encode($cookie_data), $current_time + 60, '/');
    }
    // 搜索请求次数超过限制,则显示错误信息
    if ($count > $search_frequency) {
        // 获取 WordPress 头部
        get_header();        
        // 显示错误消息
        echo '
'; echo '
'; echo ''; echo '

搜索限制

'; echo '

搜索频率为每分钟 10 次,请 60 秒后再尝试其他操作

'; echo '
'; echo '
'; // 获取 WordPress 尾部 get_footer(); exit; // 确保后续代码不被执行 } } // 在 WordPress 的"wp"挂钩上执行搜索频率限制检查 add_action('wp', 'limit_search_frequency');

本站QQ群:683851361,联系我:zrblog@qq.com

分享到
便宜VPS/10美元VPS/洛杉矶、圣何塞等多个机房