Apache不提供一键丢弃畸形请求的开关,需分层防护:协议层用TraceEnable off禁用TRACE/TRACK;方法层用<LimitExcept>白名单控制;内容层用mod_rewrite或map+if拦截恶意字符;资源层通过client_header_buffer_size等参数限制header大小与数量。

Apache 本身不直接“丢弃”非标准方法,但可通过分层配置实现有效拦截:禁用高危方法、白名单允许常规方法、用重写规则拦截自定义或恶意方法。
禁用 TRACE 和 TRACK 方法
这两个方法在 HTTP/1.1 中已废弃,且常被用于跨站追踪(XST)攻击。启用 TraceEnable off 可在协议解析早期直接拒绝,不进日志、不触发模块:
- 必须放在
<VirtualHost>或全局配置中(.htaccess无效) - 示例:
TraceEnable off
用 LimitExcept 设置方法白名单
对指定路径(如网站根目录或静态资源目录)只放行安全方法,其余返回 405 Method Not Allowed:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 推荐组合:
GET、HEAD、POST、OPTIONS(跨域必需) - 配置示例:
<LimitExcept GET HEAD POST OPTIONS><br> Require all denied<br></LimitExcept>
- 注意:
<Limit>在 Apache 2.4+ 已废弃,仅用<LimitExcept>
用 mod_rewrite 拦截非法或自定义方法
当需要更细粒度控制(如禁止 DEBUG、CONNECT、含空格的方法名等),可用 RewriteCond + RewriteRule 配合 F 标志返回 403 Forbidden 并终止处理:
- 示例(禁止 DEBUG 和 CONNECT):
RewriteCond %{REQUEST_METHOD} ^(DEBUG|CONNECT)$<br>RewriteRule ^ - [F] - 需确保
mod_rewrite已加载,且配置位于生效上下文(如<Directory>或虚拟主机内)
补充:关闭危险头解析与限制请求头大小
部分畸形请求依赖非法头字段绕过检测。可配合以下设置增强健壮性:
-
IgnoreInvalidHeaders on:静默忽略无法解析的请求头(默认为off) -
LimitRequestFields 40:防大量空头耗尽内存 -
LimitRequestFieldSize 2048:防超长 Cookie 或 User-Agent 触发缓冲区溢出 - 这些参数作用于协议解析层,不影响方法逻辑,但能减少异常请求干扰

















