htaccess SetEnvIfNoCase无法拦截HTTP恶意来源请求求助
适配HTTP/HTTPS场景的恶意请求拦截规则
问题根源在于规则执行顺序:如果HTTPS重定向规则优先于拦截规则执行,HTTP来源的恶意请求会先被重定向到HTTPS,此时拦截规则未对原始HTTP请求生效,导致绕过拦截。
以下是调整后的完整规则,确保HTTP和HTTPS请求都能被正确拦截:
# 1. 先执行恶意请求拦截规则,覆盖HTTP/HTTPS场景 SetEnvIfNoCase Referer ".*(poker|sevastopol|semalt|best|o-o-6-o-o|linkwebdirectory).*" bad_referer SetEnvIfNoCase Referer "\.pw" bad_referer SetEnvIfNoCase User-Agent "Acunetix" bad_referer SetEnvIfNoCase User-Agent "FHscan" bad_referer Deny from env=bad_referer # 2. 再执行HTTPS重定向规则 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
关键说明:
- 规则顺序:拦截规则必须放在HTTPS重定向规则之前,确保所有HTTP请求在被重定向前先经过恶意来源检查,避免绕过。
- 正则兼容性:原有的Referer正则已兼容HTTP/HTTPS链接,
.*会匹配http://或https://开头的任意前缀,只要包含目标关键词就会被标记为bad_referer。 - 可选扩展:如果需要拦截空Referer或其他特殊场景,可添加额外规则:
# 拦截空Referer(按需启用) SetEnvIfNoCase Referer "^$" bad_referer
内容的提问来源于stack exchange,提问作者hediye
相关产品推荐
相关产品推荐

