主页/WordPress笔记/博客文章/综合文章/如何在WordPress中限制心跳API(初学者简单指南)

如何在WordPress中限制心跳API(初学者简单指南)

Bug编译狮

Bug编译狮

在WordPress中限制心跳API可以帮助保护网站免受恶意爬虫的攻击,并防止不必要的流量消耗。以下是一些基本步骤和示例代码,帮助您在WordPress中启用心跳API限制。

步骤 1: 设置WordPress禁用心跳功能

首先,在您的WordPress安装目录下的 wp-config.php 文件中添加如下行:

define('WP_HIG', false);

或者,如果您的服务器支持PHP配置文件,请编辑该文件并添加上述定义到 wp-config.php 文件中的 define('WP_HIG', true); 前面。

步骤 2: 创建自定义插件或使用现有插件

为了更精细地控制心跳API的限制,您可以创建一个新的自定义插件,或者利用现有的WordPress插件如“Rate Limiting for WordPress”。

示例:创建自定义插件

  1. 创建新文件夹: 在您的WordPress插件目录下创建一个名为 heartbeat_limits 的文件夹。

  2. 创建插件主文件: 在此文件夹中创建一个名为 heartbeat_limits.php 的文件。

  3. 编写插件代码: 插件代码应如下所示:

    <?php
    /*
    Plugin Name: Heartbeat Limits
    Description: A plugin to limit the number of requests sent via the heartbeat API.
    Version: 1.0
    Author: YourName
    */
    
    // Define constants
    define( 'HIT_LIMIT', 5 ); // Maximum allowed hits per hour
    define( 'HOUR', time() );
    
    // Initialize variables
    $hits = 0;
    
    function check_heartbeat_limit() {
       global $hits;
       if ( HOUR > time() ) return; // Only update after an hour has passed
    
       $current_hits = get_option( 'hit_counter' );
       if ( isset($current_hits) && !empty($current_hits) ) {
           $hits += intval($current_hits);
       }
    
       $hits++;
    
       if ($hits >= HIT_LIMIT) {
           wp_die("You have reached your daily hit limit. Please try again tomorrow.");
       }
    }
    
    add_action( 'init', 'check_heartbeat_limit' );
  4. 注册动作: 使用 add_action 函数来触发 check_heartbeat_limit 动作,确保心跳检测在WordPress初始化时执行。

  5. 保存插件: 将 heartbeat_limits.php 文件上传到您的WordPress插件目录,并激活插件以应用更改。

步骤 3: 测试插件设置

打开您的WordPress管理面板,导航到“插件”部分,找到刚刚创建的“Heartbeat Limits”,然后点击“激活”。现在,当用户尝试通过心跳API访问您的站点时,系统会检查是否已达到每日限制。

效果验证

  • 如果您的网站已经设置了心跳API限制,当用户尝试访问您的网站时,他们可能会看到一条消息:“You have reached your daily hit limit. Please try again tomorrow.”
  • 如果没有设置限制,系统将允许所有请求通过。

这个简单的例子展示了如何在WordPress中实现心跳API的限制,从而保护您的网站免受恶意流量的影响。根据您的需求,可以进一步调整代码以满足特定的安全要求。

黑板前的Bug语法讲师

黑板前的Bug语法讲师

在WordPress中限制心跳API(也称为“用户活跃度”或“用户活动”),可以提高网站的安全性并防止恶意攻击者滥用您的站点。这可以通过设置一个简单的阈值来实现,例如每隔一段时间检查用户的在线状态。

以下是在WordPress中实现这个功能的基本步骤:

  1. 首先,确保您已经安装了WordPress和WordPress主题。
  2. 在您的主题文件夹中找到functions.php文件。
  3. 打开functions.php文件,查找add_action()函数。
  4. 添加以下代码到functions.php文件:
    function heartbeat_api_check() {
    $last_activity_time = get_option('wp_last_activity');
    if ($last_activity_time) {
        $now = time();
        $time_difference = $now - $last_activity_time;
        if ($time_difference < 60) { // 一分钟内没有活动
            update_option('wp_last_activity', $now);
        }
    } else {
        update_option('wp_last_activity', $now);
    }
    }
    add_action('heartbeat_api_check', 'heartbeat_api_check');
  5. 运行以下命令以激活此新功能:wp dashboard / theme options / functions.php / heartbeat_api_check
  6. 现在,在每次用户访问您的网站时,都会检查他们是否在过去的一分钟内没有活动。如果超过一分钟,则会记录最后一次活动时间,并且下次用户访问时,该时间将被用于比较。

以下是使用PHP、MySQL和WordPress的示例代码:

示例一:使用PHP、MySQL和WordPress

首先,创建一个新的PHP文件,如heartbeat_api_check.php

<?php
require_once __DIR__ . '/functions.php';

$last_activity_time = get_option('wp_last_activity');

if (!isset($last_activity_time)) {
    $last_activity_time = time();
}

$time_difference = time() - $last_activity_time;

if ($time_difference < 60) {
    update_option('wp_last_activity', time());
} else {
    update_option('wp_last_activity', $last_activity_time);
}
?>

然后,将此文件添加到您的WordPress主题的functions.php文件中:

add_action('heartbeat_api_check', 'heartbeat_api_check');

最后,运行以下命令激活此新功能:

wp dashboard / theme options / functions.php / heartbeat_api_check

示例二:使用JavaScript和jQuery

对于更简洁的解决方案,您可以考虑使用JavaScript和jQuery。请记住,虽然这种方式可能不是最佳实践,但这是实现相同功能的一种方法。

  1. 创建一个名为heartbeats.js的新文件。
  2. heartbeats.js文件中编写以下JavaScript代码:
    
    var lastHeartbeatTime = null;

$(document).ready(function() { setInterval(function() { $.ajax({ url: ‘http://yourwebsite.com/wp-json/heartbeat-api/check‘, method: ‘GET’, success: function(response) { var now = new Date().getTime(); if (response && response.lastActivity > 0 && now – response.lastActivity < 60 * 1000) { lastHeartbeatTime = response.lastActivity; console.log(“Last heartbeat was within the minute limit”); } else { lastHeartbeatTime = now; console.log(“No activity detected, updating last heartbeat.”); }

            saveHeartbeat(lastHeartbeatTime);
        },
        error: function(xhr, status, err) {
            console.error(err);
        }
    });
}, 60 * 1000); // Check every minute

});

function saveHeartbeat(heartbeat) { $.post(‘/wp-admin/admin-ajax.php?action=save_heartbeat&heartbeat=’ + heartbeat, {}, function(response) { console.log(“Heartbeat saved successfully:”, response); }).fail(function(xhr, status, err) { console.error(“Error saving heartbeat:”, xhr.responseText); }); }


3. 将上述JavaScript代码复制到`heartbeats.js`文件中。
4. 启动`heartbeats.js`文件,它将在后台每分钟检查一次用户活动。
5. 您需要替换`http://yourwebsite.com/wp-json/heartbeat-api/check`为实际的API URL。

请注意,这种方法仅适用于轻量级的API请求。对于更复杂的需求,请考虑使用专业的安全措施,例如使用HTTPS加密通信。