Я перепробовал несколько способов отключить метод TRACE на моем веб-сервере Apache, но по какой-то причине он отключен для порта 443, но не для порта 80.
Я добавил следующую директиву в начало моего файла конфигурации:
TraceEnable off
Затем добавил следующее в блоки VirtualHost :80 и :443:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|DELETE)
RewriteRule .* - [F]
Когда я запускаю curl --insecure -v -X TRACE
на своем веб-сервере, я правильно получаю 403 Forbidden
для https, но 200 OK
для http. Важно отметить, что у меня есть постоянное перенаправление для всех http-подключений к https. Этот веб-сервер также работает как обратный прокси-сервер. Редактировать: Я пробовал изменить постоянное перенаправление на правило, mod_rewrite
и оно все еще не проходит curl TRACE
тест.
Файл конфигурации:
NameVirtualHost XX.XX.XX.XX:80
NameVirtualHost XX.XX.XX.XX:443
SSLSessionCache "shm:logs/ssl_scache(512000)"
Timeout 2400
ProxyTimeout 2400
ProxyBadHeader Ignore
FileETag None
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header always append X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection "1; mode=block"
TraceEnable off
<VirtualHost XX.XX.XX.XX:80>
ServerName www.xxxxxxx.com:80
ServerAlias www.xxxxxx.com
ServerAdmin localhost@root
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R]
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|DELETE)
RewriteRule .* - [F]
ErrorLog "|/usr/sbin/rotatelogs /etc/httpd/logs/error.%Y-%m-%d.log 86400"
CustomLog "|/usr/sbin/rotatelogs /etc/httpd/logs/access.%Y-%m-%d.log 86400" common
#Redirect permanent / https://www.xxxxxxx.com:443/
</VirtualHost>
<VirtualHost XX.XX.XX.XX:443>
Options Includes FollowSymLinks MultiViews
ServerName www.xxxxxxxx.com:443
ServerAlias www.xxxxxxxx.com
ServerAdmin localhost@root
SSLProxyEngine On
SSLEngine On
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
"/etc/httpd/ssl_certs/hdsisd/Apache_Plesk_Install.txt"
SSLCertificateFile "/etc/httpd/ssl_certs/xxxxx.crt"
SSLCertificateKeyFile "/etc/httpd/ssl_certs/server.key"
SSLCertificateChainFile "/etc/httpd/ssl_certs/Apache_Plesk_Install.txt"
ErrorLog "|/usr/sbin/rotatelogs /etc/httpd/logs/error.%Y-%m-%d.log 86400"
CustomLog "|/usr/sbin/rotatelogs /etc/httpd/logs/access.%Y-%m-%d.log 86400" common
RewriteEngine On
RewriteCond %{THE_REQUEST} !HTTP/1.1$
RewriteRule .* - [F]
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|DELETE)
RewriteRule .* - [F]
ProxyPreserveHost On
<Location />
ProxyPass https://XX.XX.XX.XX/ Keepalive=On
ProxyPassReverse https://XX.XX.XX.XX/
Order allow,deny
Allow from all
</Location>
</VirtualHost>
решение1
Я знаю, что я довольно поздно с этим. Но вот ответ для тех, кому это может понадобиться в будущем. Проблема в файле конфигурации, если вы заметили, что спрашивающий использует следующие условия перенаправления:
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R]
перенаправить HTTP-трафик на HTTPS, и это заставляет сервер перенаправить на протокол HTTPS и игнорировать все, что находится ниже этих строк. Следовательно, он не может отключить метод трассировки в своем HTTP-запросе. Поэтому исправление заключается в перемещении комментария трассировки выше перенаправления, например, так:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|DELETE)
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R]
RewriteRule .* - [F]