返回列表 发布新帖
查看: 100|回复: 0

[代码技巧] wordpress搜索频率限制

[复制链接]
SunJu_FaceMall
#网站认证# 飞流网创始人  网站认证

飞流网创始人

社区贡献

102

主题

173

回帖

1万

积分

等级头衔
Icon组别 : 管理员
Icon等级 :

积分成就
   钻石 : 49 颗
   贡献 : 364 点
   金币 : 9 枚
Icon在线时间 : 1136 小时
Icon注册时间 : 2024-11-22
Icon最后登录 : 2025-9-19

荣誉勋章

会员LV.1会员LV.2会员LV.3会员LV.4会员LV.5会员LV.6会员LV.7会员LV.8会员LV.9会员LV.10

资源无需等待,交易就趁现在,全面资源整合网络大咖云集,让你轻松玩转互联网!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
可设置几分钟(可以自己改代码为秒)内搜索几次时,自动封禁某IP的搜索功能多少秒,建议与封禁时间与时间窗口时长一致
避免WordPress搜索功能被刷,导致服务器CPU使用率和负载状态100%爆满
以下代码放入主题函数function.php中,子比放入func.php中
class WXS_SearchFrequencyLimit {
  •     // 配置参数可根据需要修改
  •     private $search_limit_count = 3; // 允许的最大搜索次数
  •     private $time_window_in_minutes = 1; // 时间窗口(分钟)
  •     private $block_time_in_seconds = 10; // 超过限制后封禁时间(秒)
  •     private $block_message = '您的搜索频率过高,请在 %d 秒后再试。'; // 封禁提示消息

  •     public function __construct() {
  •         add_filter( 'pre_get_posts', array( $this, 'check_search_limit' ) );
  •         if ( ! is_admin() ) {
  •             add_action( 'wp_loaded', array( $this, 'check_block_status_on_any_page' ) );
  •         }
  •     }

  •     private function get_visitor_ip() {
  •         if ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
  •             $ip = $_SERVER['HTTP_CLIENT_IP'];
  •         } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
  •             $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  •         } else {
  •             $ip = $_SERVER['REMOTE_ADDR'];
  •         }
  •         return sanitize_text_field( $ip );
  •     }

  •     private function set_block_cache($key, $expiration) {
  •         $expire_time = time() + $expiration;
  •         wp_cache_set($key, $expire_time, 'search_limit', $expiration);
  •     }
  •    
  •     private function get_remaining_block_time($key) {
  •         $expire_time = wp_cache_get($key, 'search_limit');
  •         if ($expire_time === false) {
  •             return 0;
  •         }
  •         $remaining = $expire_time - time();
  •         return $remaining > 0 ? $remaining : 0;
  •     }
  •     public function check_block_status_on_any_page() {
  •         $visitor_ip = $this->get_visitor_ip();
  •         $cache_key = 'search_block_' . $visitor_ip;
  •         $remaining_time = $this->get_remaining_block_time($cache_key);
  •         if ($remaining_time > 0 && !is_search()) {
  •             $message = sprintf($this->block_message, $remaining_time);
  •             add_action('wp_body_open', function() use ($message) {
  •                 echo '<div style="background-color: #fff3cd; color: #856404; padding: 15px; text-align: center; border: 1px solid #ffeeba; margin-bottom: 20px;">';
  •                 echo esc_html($message);
  •                 echo '</div>';
  •             });
  •         }
  •     }

  •     public function check_search_limit($query) {
  •         if (!is_admin() && $query->is_search && $query->is_main_query()) {
  •             $visitor_ip = $this->get_visitor_ip();
  •             $limit = $this->search_limit_count;
  •             $window_seconds = $this->time_window_in_minutes * 60;
  •             $block_time = $this->block_time_in_seconds;
  •             $cache_key = 'search_block_' . $visitor_ip;
  •             $records_key = 'search_records_' . $visitor_ip;
  •             $remaining_time = $this->get_remaining_block_time($cache_key);
  •             if ($remaining_time > 0) {
  •                 wp_die(
  •                     sprintf($this->block_message, $remaining_time),
  •                     '搜索频率限制', //标题
  •                     array('response' => 429)
  •                 );
  •             }

  •             $search_records = wp_cache_get($records_key, 'search_limit', false, $found);
  •             if (!$found) {
  •                 $search_records = array();
  •             }
  •             $current_time = time();

  •             $search_records = array_filter($search_records, function($timestamp) use ($current_time, $window_seconds) {
  •                 return $current_time - $timestamp < $window_seconds;
  •             });

  •             if (count($search_records) >= $limit) {
  •                 $this->set_block_cache($cache_key, $block_time);
  •                 wp_cache_delete($records_key, 'search_limit');
  •                
  •                 wp_die(
  •                     sprintf($this->block_message, $block_time),
  •                     '搜索频率限制',
  •                     array('response' => 429)
  •                 );
  •             } else {
  •                 $search_records[] = $current_time;
  •                 wp_cache_set($records_key, $search_records, 'search_limit', $window_seconds);
  •             }
  •         }

  •         return $query;
  •     }
  • }
  • new WXS_SearchFrequencyLimit();

  • 其次,你可以使用WAF对/?s=限制
    路虽远,行则将至;事虽难,做则必成。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    飞流广播+ 发布

    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    09-11 11:40
    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    09-02 09:17
    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    08-27 08:56
    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    08-20 15:12
    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    08-03 10:22
    系统消息:柒沐已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
    06-30 08:57
    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    06-18 09:14
    系统消息:清风网络已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
    04-11 09:40
    系统消息:清风网络已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    04-10 09:31
    系统消息:IXM77777已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    04-09 13:44
    系统消息:清风网络已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    04-09 09:22
    系统消息:柒沐已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
    04-09 08:52
    系统消息:清风网络已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    04-08 09:24
    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    04-07 09:02
    系统消息:柒沐已经连续答对10道难题,逆天学霸谁与争锋?!#每日答题#
    02-27 09:35
    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    02-26 09:06
    系统消息:柒沐已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    02-25 08:49
    系统消息:飞流安卓客户端APP已上线,请在QQ群(123129)群文件内获取下载。
    02-21 02:22
    系统消息:四哥已经连续答对3道难题,逆天学霸谁与争锋?!#每日答题#
    12-14 12:55
    01-24 12:40
    站内通告

    提供资源交易、信息共享、靓号交流、技术变现、学习问答、兴趣娱乐等全面服务。

    1.丰富功能系统,扩展社区特色玩法,打造最好的互联网聚集圈子。

    2.准确信息真实交易,安全快捷又方便,让虚拟交易面对面。

    3. 天上不会掉馅饼,话术骗术迷人心,切勿脱离平台线下交易,被骗与平台无关!

    4. 欺诈骗钱,违规违法将视情受到警告&禁言&封号甚至检举至👮🏻‍♀️处理!

    官方Q群:123129钉推群:BAYR2383 站长QQ:3220000000

    投诉/建议/商务合作联系

    fl@fllt.cn

    严禁私下交易,被骗与本站无关。
    违反交易细则,取证立查严惩。
    • 钉钉新帖推送群
    • 官方交流QQ群
    • 站长唯一微信号

    👮曝光Ta|🧿小黑屋|📴手机页|飞流网 ( 渝ICP备2025054677号-1|电信增值许可 渝B2-20250789 )|网站地图

    GMT+8, 2025-9-19 02:49 , Processed in 0.084838 second(s), 67 queries, MemCached On , Gzip On.

    Based on XJ-TX X3.5 Licensed

    飞流论坛 HanAnalytics icp Astro vhAstro-Theme

    关灯 在本版发帖
    扫一扫添加微信客服
    QQ客服返回顶部
    快速回复 返回顶部 返回列表