添加到购物车攻击机器人检测返回错误状态码排查
问题排查与解决方案
核心原因分析
当前规则出现的问题主要来自两个方面:
1. 规则执行顺序与[L]标志冲突
原blockbot规则未添加[L]标志,导致设置环境变量后服务器会继续执行后续的重定向规则。而重定向规则带有[L]标志,会直接终止所有规则处理并返回重定向响应,LiteSpeed服务器还没来得及处理blockbot变量对应的403拦截逻辑。
2. 条件逻辑范围偏差
原规则的OR条件链范围错误,将非www域名/HTTPS关闭与机器人UA/异常Referer混在同一个OR组中,逻辑上变成"满足任意一个条件即触发拦截",既不符合你"只拦截不含www的add-to-cart机器人请求"的初衷,也可能导致部分目标请求的匹配逻辑失效。
修正后的规则方案
方案一:保留blockbot环境变量逻辑
调整条件分组,明确"非www/HTTPS关闭"和"机器人/异常Referer"为两组必须同时满足的条件,并添加[L]标志终止后续规则:
# 拦截非www/HTTPS off的恶意add-to-cart请求 RewriteCond %{QUERY_STRING} (^|&)add-to-cart=[0-9]+ [NC] RewriteCond %{HTTP_USER_AGENT} !googlebot [NC] # 第一组:必须是非www域名或HTTPS未开启 RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] # 第二组:必须是机器人UA或异常Referer RewriteCond %{HTTP_USER_AGENT} (bot|crawl|spider) [NC,OR] RewriteCond %{HTTP_REFERER} \?.*(^|&)add-to-cart=[0-9]+(&|$) [NC,OR] RewriteCond %{HTTP_REFERER} ^$ [NC] # 设置blockbot变量并终止后续规则处理 RewriteRule .* - [E=blockbot:1,L] # 重定向到www HTTPS域名 RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
方案二:直接返回403(更可靠,不依赖服务器预设变量)
跳过LiteSpeed的blockbot变量,直接用[F]标志返回403,避免服务器配置的不确定性:
# 直接拦截非www/HTTPS off的恶意add-to-cart请求 RewriteCond %{QUERY_STRING} (^|&)add-to-cart=[0-9]+ [NC] RewriteCond %{HTTP_USER_AGENT} !googlebot [NC] RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteCond %{HTTP_USER_AGENT} (bot|crawl|spider) [NC,OR] RewriteCond %{HTTP_REFERER} \?.*(^|&)add-to-cart=[0-9]+(&|$) [NC,OR] RewriteCond %{HTTP_REFERER} ^$ [NC] RewriteRule .* - [F,L] # 重定向到www HTTPS域名 RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^example\.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
额外验证步骤
若测试时仍看到302,大概率是浏览器缓存了之前的301重定向,可使用命令行工具测试避免缓存干扰:
curl -I https://example.com/?add-to-cart=1735
内容的提问来源于stack exchange,提问作者Mesmer7
相关产品推荐
相关产品推荐

