默认情况下,Apache 2.0.52将响应它收到的任何HTTP TRACE请求。这是一个潜在的安全问题,因为它可以允许某些类型的XSS攻击。有关详细信息,请参阅http://www.apacheweek.com/issues/03-01-24#news
我正在尝试按照上面链接的页面中显示的说明禁用TRACE请求。我在http.conf文件中添加了以下代码行,然后重新启动了apache:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
但是,当我向我的Web服务器发送TRACE请求时,它似乎忽略了重写规则并响应,就好像仍然启用了TRACE请求。
例如:
[admin2@dedicated ~]$ telnet XXXX.com 80
Trying XXXX...
Connected to XXXX.com (XXXX).
Escape character is '^]'.
TRACE / HTTP/1.0
X-Test: foobar
HTTP/1.1 200 OK
Date: Sat, 11 Jul 2009 17:33:41 GMT
Server: Apache/2.0.52 (Red Hat)
Connection: close
Content-Type: message/http
TRACE / HTTP/1.0
X-Test: foobar
Connection closed by foreign host.
服务器应该响应403 Forbidden。相反,它用200 OK回复我的请求。
作为测试,我将RewriteCond更改为%{REQUEST_METHOD} ^ GET
当我这样做时,Apache使用403 Forbidden正确响应所有GET请求。但是当我将GET更改回TRACE时,它仍然允许TRACE请求通过。
如何让Apache停止响应TRACE请求?
答案 0 :(得分:1)
某些版本需要:
TraceEnable Off
答案 1 :(得分:1)
我找到了正确的方法。
我曾尝试将重写指令块放在三个位置:httpd.conf文件的<Directory "/var/www/html">
部分,httpd.conf文件的顶部和/ var / www / html中/.htaccess文件。这三种方法都不起作用。
但是,最后,我尝试将代码块放在httpd.conf的<VirtualHost *:80>
部分。出于某种原因,它在放置时有效。那里。
答案 2 :(得分:1)
正如您所说,这适用于您的VirtualHost块。由于你没有显示httpd.conf我不能说为什么你的初始尝试不起作用 - 它是上下文敏感的。
它失败了,因为它在那里并不真正相关,通常用于访问控制。如果它在.htaccess中不起作用,那很可能是apache没有找到它(你可以使用AllowOverride来启用它们)。