포트 80에서 Apache TRACE 메서드가 비활성화되지 않았습니다.

포트 80에서 Apache TRACE 메서드가 비활성화되지 않았습니다.

Apache 웹 서버에서 TRACE 메서드를 비활성화하기 위해 여러 가지 방법을 시도했지만 어떤 이유로 포트 443에서는 비활성화되었지만 포트 80에서는 비활성화되지 않았습니다.

구성 파일 상단에 다음 지시문을 추가했습니다.

TraceEnable off

그런 다음 :80 및 :443 VirtualHost 블록에 다음을 추가했습니다.

RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|DELETE)
RewriteRule .* - [F]

내 웹서버에서 을 실행하면 https에 대한 는 curl --insecure -v -X TRACE제대로 표시되지만 http에 대한 는 올바르게 표시됩니다. https에 대한 모든 http 연결에 대해 영구적인 리디렉션이 있다는 점에 유의하는 것이 중요할 수 있습니다. 이 웹서버는 역방향 프록시로도 실행됩니다. 편집: 영구 리디렉션을 규칙으로 변경하려고 시도했지만 여전히 테스트에 실패합니다.403 Forbidden200 OKmod_rewritecurl 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]

관련 정보