在Apache / 2.0.52上禁用TRACE请求方法

时间:2009-07-11 17:40:09

标签: apache xss trace mod-rewrite

默认情况下,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请求?

3 个答案:

答案 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来启用它们)。