![Apache TRACE メソッドがポート 80 で無効になっていません](https://rvso.com/image/747355/Apache%20TRACE%20%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E3%83%9D%E3%83%BC%E3%83%88%2080%20%E3%81%A7%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93.png)
Apache Web サーバーで TRACE メソッドを無効にするために複数の方法を試しましたが、何らかの理由でポート 443 では無効になっていますが、ポート 80 では無効になっていません。
設定ファイルの先頭に次のディレクティブを追加しました。
TraceEnable off
次に、:80 と :443 の両方の VirtualHost ブロックに以下を追加しました。
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|DELETE)
RewriteRule .* - [F]
Web サーバーで を実行すると、 https の場合はcurl --insecure -v -X TRACE
が適切に取得されますが、 http の場合は が取得されます。https へのすべての http 接続に対してリダイレクトが永続的になっていることに注意することが重要です。この Web サーバーはリバース プロキシとしても実行されています。編集: リダイレクトを永続的にルールに変更してみましたが、それでもテストに失敗します。403 Forbidden
200 OK
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]