我使用 Apache 2.0 作为 HTTP 服务器和特定用途的基于 Perl 的 HTTP 客户端。到目前为止,我使用 httpd.conf 文件中的以下配置禁用 TRACE 和 TRACK 方法:
RewriteEngine 开启
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
重写规则 .* - [F]
问题
1)为了提高性能,我可以用以下配置替换以前的配置吗?
跟踪启用关闭
2)“traceEnable off”命令能否确保TRACE和TRACK方法都被禁用?
3) 最后,由于只有基于 Perl 的 HTTP 客户端才能访问 HTTP 服务器,我是否需要在 httpd.conf 文件中添加 TRACE/TRACK 禁用配置?
答案1
根据文档http://httpd.apache.org/docs/2.0/mod/core.html#traceenableTraceEnable Off 只会禁用 HTTP TRACE 方法。它对 TRACK 方法不起作用。
见1.
如果您的服务器是公共的,那么您可能应该禁用这些方法。
此外:由于你似乎有点偏执(这可能是一个好的事情!),我会升级到 Apache 的更高版本,因为 2.0 的最终版本已经发布并且没有新的错误 - 包括安全漏洞将被修复。
答案2
案例A:TRACE指令
使用 httpd.conf 文件中的“traceEnable on”命令并运行以下 curl 命令:
SITE=
http://www.server.my
; curl $SITE -X痕迹
响应是:
TRACE / HTTP/1.1 User-Agent: curl/7.29.0 Host: http://www.server.my Accept: */*
另一方面,如果“traceEnable off”,则前面的 curl 命令返回:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
<hr>
<address>Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7d DAV/2 Server at http://www.server.my Port 80</address>
</body></html>
这意味着 TRACE enable 命令被禁用。因此,我认为“traceEnable off”命令工作正常。
案例 B:TRACK 指令
使用 httpd.conf 文件中的“traceEnable on”命令并运行以下 curl 命令:
SITE=
http://www.server.my
; curl $SITE -X追踪
响应是:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Method Not Implemented</title>
</head><body>
<h1>Method Not Implemented</h1>
<p>TRACK to / not supported.<br />
</p>
<hr>
<address>Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7d DAV/2 Server at http://www.server.my Port 80</address>
</body></html>
以下是上一个测试用例的结论:501 方法未实现。如果你向 Apache 发送 TRACE 请求,它会返回此方法未实现。所以,我认为我们不必担心……这已由下一个测试用例证实。
如果“traceEnable off”,则先前的 TRACK 请求将返回相同的“未实现”消息。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Method Not Implemented</title>
</head><body>
<h1>Method Not Implemented</h1>
<p>TRACK to / not supported.<br />
</p>
<hr>
<address>Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.7d DAV/2 Server at http://www.server.my Port 80</address>
</body></html>
根据http://publib.boulder.ibm.com/httpserv/ihsdiag/http_trace.html尽管 Apache 服务器本身并不支持 TRACK 方法,但插件模块还是有可能提供对该方法的支持。要禁用插件模块的此功能,除了禁用 TRACE 方法外,我们可能还必须使用 Rewrite 模块禁用 TRACK 方法。
但是如果你没有在 Apache 中安装 TRACK 插件,就不会有安全问题。这个假设成立吗?