apache拦截恶意http方法的核心是禁用非必要方法(如put、delete、trace、options、connect),仅保留get和post,通过limitexcept指令在directory或location块中配置“ require all denied”实现405拦截;也可用mod_rewrite配合rewritecond %{request_method} ^(put|delete|trace|connect|options)$ [nc]和[f]返回403,更明确禁止;同时需检查并关闭默认options响应与启用traceenable off防信息泄露。

Apache 配置文件中拦截特定恶意 HTTP 方法,核心是禁用非必要方法(如 PUT、DELETE、TRACE、OPTIONS、CONNECT),只保留 GET 和 POST。这类请求本身不常用于普通页面浏览,却极易被用于上传 Webshell、删文件、探测服务器信息等攻击。
直接在虚拟主机或主配置中限制方法
推荐使用 LimitExcept 指令,简洁且生效层级明确:
- 在
<directory></directory>或<location></location>块内添加:
<limitexcept get post><br> Require all denied<br></limitexcept>
这段配置表示:除 GET 和 POST 外,所有其他 HTTP 方法(HEAD 默认允许,但若需严格控制也可显式列出)一律拒绝,返回 405 Method Not Allowed。
注意:Require all denied 在 Apache 2.4+ 中有效;若为 2.2 版本,需改用 Order deny,allow + Deny from all。
配合 mod_rewrite 进行更精细的拦截
当需要记录日志、重定向或对特定路径做差异化处理时,可用 rewrite 规则:
- 启用 rewrite 模块(确认
LoadModule rewrite_module modules/mod_rewrite.so已启用) - 在虚拟主机或 .htaccess 中加入:
RewriteEngine On<br>RewriteCond %{REQUEST_METHOD} ^(PUT|DELETE|TRACE|CONNECT|OPTIONS)$ [NC]<br>RewriteRule ^ - [F][F] 返回 403 Forbidden,比 405 更明确表达“禁止而非不支持”。该方式适合需统一拦截全站或某目录下所有非法方法的场景。
检查并关闭默认暴露的 OPTIONS 响应
即使未显式启用,Apache 有时会自动响应 OPTIONS 请求并返回支持的方法列表(含中间件版本),构成信息泄露风险:
- 在主配置或虚拟主机中添加:
<location><br> LimitExcept GET POST HEAD<br> Require all denied<br><br></location>
或直接禁用 OPTIONS 的自动响应(适用于不依赖 CORS 预检的站点):
TraceEnable off
该指令需放在全局上下文(如 httpd.conf 顶部),可彻底禁用 TRACE 方法,并降低 OPTIONS 泄露风险。
验证是否生效
部署后可用 curl 快速测试:
-
curl -X PUT https://your-site.com/test.txt→ 应返回 403 或 405 -
curl -X OPTIONS https://your-site.com/→ 若配置了TraceEnable off且无额外响应头,说明已收敛
同时检查 Apache error log,确认拦截行为被记录(如 client denied by server configuration),便于持续监控异常请求模式。











