Отключение метода запроса TRACE в Apache / 2.0.52 - PullRequest
4 голосов
/ 11 июля 2009

По умолчанию 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] 

Однако, когда я отправляю запрос 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 Запрещено. Вместо этого он отвечает на мой запрос с 200 OK.

В качестве теста я изменил RewriteCond на% {REQUEST_METHOD} ^ GET

Когда я делаю это, Apache правильно отвечает на все запросы GET с помощью 403 Forbidden. Но когда я изменяю GET обратно на TRACE, он все равно пропускает запросы TRACE.

Как я могу заставить Apache перестать отвечать на запросы TRACE?

Ответы [ 3 ]

1 голос
/ 11 июля 2009

Я понял, как это сделать.

Я пытался разместить блок директив перезаписи в трех местах: в <Directory "/var/www/html"> части файла httpd.conf, в верхней части моего файла httpd.conf и в / var / www / html /. файл htaccess. Ни один из этих трех методов не сработал.

Наконец, однако, я попытался поместить блок кода в <VirtualHost *:80> часть моего httpd.conf. По какой-то причине, это работает, когда это помещено. есть.

1 голос
/ 11 июля 2009

Как вы сказали, это работает в вашем блоке VirtualHost. Поскольку вы не показали httpd.conf, я не могу сказать, почему ваша первоначальная попытка не сработала - она ​​зависит от контекста.

Это не удалось, потому что это не очень актуально, это обычно для контроля доступа. Если это не сработало в .htaccess, скорее всего, apache его не искал (вы можете использовать AllowOverride, чтобы включить их).

1 голос
/ 11 июля 2009

Для некоторых версий требуется:

TraceEnable Off

...