首页 > 代码

wordpress_分页访问记录防刷统计功能(如一天同 IP 多次访问超页数则封 IP

分页防刷统计与封锁机制的完整代码,可配合你已有的分页访问限制功能使用,实现更强的反采集防御:
功能目标
每个 IP 访问分页页码过多(如超过 10 次超页限制)就临时封锁;
使用 WordPress 的 transient 缓存记录访问;
配合 Nginx 也可做更高强度防御(如屏蔽 IP);

完整代码:加入 functions.php


add_action('template_redirect', 'limit_paging_with_ip_protection');
function limit_paging_with_ip_protection() {
  if (is_admin()) return;

  $max_page = 20;           // 正常允许访问的最大页码
  $max_violation = 10;      // 单个 IP 最多允许违规次数
  $block_minutes = 60;      // 封锁时长(分钟)

  $paged = max(1, (int) get_query_var('paged'));
  if (! (is_home() || is_archive() || is_search() || is_tag() || is_category()) || $paged <= $max_page) {
    return;
  }

  // 获取用户 IP(兼容 CDN)
  $ip = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? $_SERVER['REMOTE_ADDR'];
  $block_key = 'block_ip_' . md5($ip);
  $count_key = 'violation_count_' . md5($ip);

  // 如果已被封锁
  if (get_transient($block_key)) {
    show_fake_404();
  }

  // 增加违规次数
  $count = (int) get_transient($count_key);
  $count++;
  set_transient($count_key, $count, 6 * HOUR_IN_SECONDS);

  // 如果超限就封锁
  if ($count >= $max_violation) {
    set_transient($block_key, 1, $block_minutes * 60);
    show_fake_404();
  }
}

// 显示伪 404 页面
function show_fake_404() {
  global $wp_query;
  $wp_query->set_404();
  status_header(404);
  nocache_headers();
  $template_404 = get_query_template('404');
  if ($template_404) {
    include $template_404;
    exit;
  } else {
    echo '<h1>404 Not Found</h1>';
    exit;
  }
}

  • 批量设置wordpress文章分类,把文章 ID 区间为 1256869 到 1257421批量设置分类为 ID =5
  • 将 cuwen.wp_posts 中 文章 ID 区间为 1256869 到 1257421(含) 的文章批量 […]

  • 同一台服务器里的两个wordpress数据库文章内容叠加复制
  • 问题:同一台服务器里的两个wordpress数据库,我要把名为temp数据库里的wp_posts的所有文章 全 […]

  • WordPress 如何在首页与内页用不同的菜单或header
  • 开发wordpress主题时,首页的header内容与内页的header内容希望不一样,这时就要用到WordP […]

  • wordpress有必要在body内加<body <?php body_class(); ?>吗?
  • 是 WordPress 主题开发中非常有用的一部分,建议保留。它会自动输出一些根据页面类型、用户状态、文章分类 […]

  • 推荐几个wordpress生成 整站 sitemap插件
  • 方法一:使用 WordPress 插件(推荐) 1. **使用 Rank Math SEO 插件(推荐)) 优 […]

  • 全局禁用 WordPress 查询用户列表
  • 全局禁用 WordPress 查询用户列表 方法一:用 pre_user_query 拦截并中断不必要的用户查 […]