Apache mod_rewrite本身非漏洞,但配置不当易致重写注入、SSRF或路径遍历;需禁用TRACE/TRACK(TraceEnable off)、白名单校验变量、限制重定向目标、规范路径并启用日志审计。

Apache 的 mod_rewrite 本身不是漏洞,但配置不当极易引发重写注入——攻击者通过构造恶意 URL 或 Host 头,绕过规则、触发非预期重定向、泄露路径,甚至配合其他模块导致 SSRF 或路径遍历。合规检查(如等保2.0、PCI DSS、OWASP ASVS)重点关注其是否引入不可信输入的直接拼接、是否放行危险方法、是否缺乏白名单约束。
严格校验 RewriteCond 中的变量来源
禁止直接使用 %{HTTP_HOST}、%{QUERY_STRING}、%{REQUEST_URI} 等未清洗变量参与重写逻辑。这些字段完全由客户端控制,可被篡改:
- 用正则精确匹配可信域名,拒绝通配或模糊模式:
RewriteCond %{HTTP_HOST} !^(www\.example\.com|example\.com)$ [NC]
匹配失败即拦截,不依赖后续规则兜底 - 对 QUERY_STRING 做最小化提取,避免
.*全量捕获:RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
再用%1引用捕获组,丢弃其余部分 - 禁用
RewriteRule中的%{...}反向引用参与文件路径拼接,尤其避免%{REQUEST_FILENAME}直接用于RewriteCond -f判断前未做路径规范化
禁用高危重写行为与方法
合规要求明确限制 TRACE、TRACK、DEBUG 类请求,且禁止任意重定向到外部域:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 全局禁用 TRACE/TRACK 方法(比 rewrite 更底层、更可靠):
TraceEnable off(Apache 2.0.55+) - 若必须用 rewrite 拦截,确保返回 403 而非 3xx:
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|DEBUG) [NC]RewriteRule .* - [F] - 所有重定向(
[R])目标必须是站内绝对路径或明确白名单域名:RewriteRule ^/old/(.*)$ /new/$1 [R=301,L]
禁止RewriteRule ^/redirect/(.*)$ http://$1 [R]这类开放重定向
限制重写作用域与启用安全上下文
避免在主配置中无差别启用 AllowOverride All,防止 .htaccess 被恶意覆盖:
- 仅在必要目录启用重写权限:
<Directory "/var/www/app"><br> AllowOverride FileInfo<br></Directory>
用FileInfo替代All,禁用AuthConfig和Limit等高风险指令 - 在重写规则前强制标准化路径,防御编码绕过:
RewriteCond %{THE_REQUEST} \s/+[^?]+\.(php|html?|js|css|png|jpg|gif)[\ ?] [NC]
比单纯匹配.php更抗 %2e%2e/ 绕过 - 对所有重写后目标加
[E=NO_UNAUTH:1]环境变量,并在后续访问控制中校验:<RequireAll><br> Require env !NO_UNAUTH<br></RequireAll>
日志与监控:让重写行为可审计
合规检查要求关键安全策略具备可观测性:
- 开启重写日志(临时调试用,生产环境建议关闭):
RewriteLog "/var/log/apache2/rewrite.log"RewriteLogLevel 3 - 在 access_log 中记录重写关键变量:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{HTTP_HOST}i\" \"%{REQUEST_URI}i\"" combined_with_host - 用 fail2ban 监控高频 403/400 日志,识别扫描式重写探测行为

















