apache的块不能直接过滤恶意请求,需结合mod_rewrite、mod_security或setenvif+require实现拦截;它仅作策略容器,深度过滤应依赖专用模块或应用层校验。

在 Apache 的 <directory></directory> 块中直接过滤恶意请求,核心思路是:**不靠它做复杂逻辑判断,而是结合 mod_rewrite、mod_security 或环境变量标记 + 权限控制,把真正“拦截”动作交给更合适的模块来执行**。单纯靠 <directory></directory> 自身指令(如 Require)只能控制“谁可以进这个目录”,不能匹配 URI、UA、参数等特征——但你可以把它作为策略落地的容器,把拦截规则“装进去”。
用 SetEnvIfNoCase + Require 拦截特定 UA 或空 Referer
这是最轻量、无需额外模块的方式,适合拦截已知扫描器或异常组合:
- 在
<directory></directory>内添加:
SetEnvIfNoCase User-Agent "(ahrefsbot|semrushbot|python-requests|go-http-client|wfuzz|ffuf|buster)" BAD_UA
SetEnvIfNoCase Referer "^-$" EMPTY_REFERER
SetEnvIf Request_URI "(wp-login\.php|xmlrpc\.php|/admin/|/api/v1/.+\?id=)" SENSITIVE_PATH
SetEnvIfExpr "env('BAD_UA') || (env('EMPTY_REFERER') && env('SENSITIVE_PATH'))" BLOCKED
Require all granted
Require not env=BLOCKED
说明:先用 SetEnvIf 标记可疑特征,再用 Require not env=BLOCKED 拒绝访问。注意 SetEnvIfExpr 需 Apache 2.4.13+,且 expr 模块已启用。
用 mod_rewrite 在 Directory 内做 URI 或参数级阻断
如果已启用 mod_rewrite,可在 <directory></directory> 中直接写重写规则,匹配即返回 403:
- 确保该目录允许覆盖:
AllowOverride None改为AllowOverride All(或至少AllowOverride FileInfo); - 在
<directory></directory>块内添加:
RewriteEngine On
RewriteCond %{QUERY_STRING} "(union\s+select|exec\s+xp_|/etc/passwd|\.\./|root\.exe)" [NC]
RewriteRule ^ - [F]
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
说明:[F] 直接返回 403 Forbidden;[NC] 表示不区分大小写;正则可按需扩展,比如加 select\s+.*\s+from 防 SQL 注入。
配合 mod_security,在 Directory 级加载定制规则
若已部署 mod_security,可通过 SecRuleInheritance Off 和 SecRuleRemoveById 实现目录级精准防护:
- 在
<directory></directory>中启用独立规则上下文:
SecRuleInheritance Off
SecRule REQUEST_HEADERS:User-Agent "@rx (nikto|sqlmap|dirb)" "id:1001,phase:1,deny,status:403,msg:'Blocked scanner UA'"
SecRule ARGS "@rx \.\./" "id:1002,phase:2,deny,status:403,msg:'Path traversal attempt'"
说明:关闭继承后,该目录只执行这里定义的规则;phase:1 检查请求头,phase:2 检查参数,比全局规则更聚焦、更少误报。
关键提醒:Directory 不是万能过滤器
<directory></directory> 本身不是 WAF,它不解析请求体、不执行正则匹配、不检查 POST 参数。真正做深度过滤,应优先用:
-
mod_security(推荐 OWASP CRS)处理 SQLi/XSS/路径遍历等通用攻击; -
mod_evasive或mod_ratelimit应对高频扫描或 CC 攻击; - 应用层(如 PHP)做白名单参数校验,比 Web 层拦截更可靠。
把 <directory></directory> 当作“策略锚点”——把规则组织进去、让权限控制生效,而不是指望它自己识别恶意内容。









