如何在Cloudflare/WordPress防火墙阻止WooCommerce filter_color超2色请求?
有效解决方案
一、Cloudflare 自定义规则(推荐)
直接通过正则匹配filter_color参数中逗号的数量来拦截恶意请求:
- 进入Cloudflare控制台 → 目标站点 → 安全 → WAF → 自定义规则 → 创建规则
- 配置规则:
- 匹配条件:
http.request.uri.query匹配正则/(?:^|&)filter_color=(?:[^,&]+,){2,}[^&]*/ - 动作选择「阻止」
- 保存规则
- 匹配条件:
说明:正则里的(?:[^,&]+,){2,}会匹配至少2个逗号,对应3种及以上颜色的请求,精准拦截恶意请求同时放过1-2种颜色的正常访问。
二、.htaccess 规则修复
替换你之前的无效规则,使用以下代码:
RewriteEngine On # 拦截filter_color包含3种及以上颜色的请求 RewriteCond %{QUERY_STRING} (?:^|&)filter_color=(?:[^,&]+,){2,}[^&]* RewriteRule ^ - [F,L]
[F]返回403禁止访问,[L]停止后续规则处理,避免冲突
三、WordPress 端拦截方案
1. Wordfence插件自定义规则
进入Wordfence → 防火墙 → 管理防火墙 → 自定义规则 → 添加规则:
- 规则类型选「自定义正则表达式」
- 填入正则:
/(?:^|&)filter_color=(?:[^,&]+,){2,}[^&]*/ - 动作选择「阻止」后保存
2. 主题代码拦截
在当前主题的functions.php中添加以下代码:
add_action('init', 'block_excessive_color_filters'); function block_excessive_color_filters() { if (isset($_GET['filter_color'])) { $color_count = substr_count($_GET['filter_color'], ',') + 1; if ($color_count >= 3) { wp_die('请求被拦截', '禁止访问', array('response' => 403)); } } }
这段代码会在请求初始化时统计颜色数量,超过2种直接返回403。
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

