안녕하세요. unnamed 입니다.
 
간단히 HTTP 메소드 차단 설정에 관련해서 알아보았습니다.
 
 
먼저, Apache 2.2 에서 불필요한 메소드를 차단하기 위해서는 httpd.conf의 <Directory> 테그 안에 <LimitExcept></LimitExcept>   를 설정하는 방식을 주로 사용합니다. 
 
<Directory />

    Options FollowSymLinks

    AllowOverride None

    <LimitExcept GET POST HEAD>

    Order deny,allow

    Deny  from all

    </LimitExcept>

</Directory >
 
 
GET, POST, HEAD 이외의 메소드는 허용하지 못하도록 설정하였습니다. 
 
그런데 위의 설정으로도 유독 TRACE 메소드는 실제로 차단되지 않아 아래의 구문으로 설정을 해줘야 합니다. 
 
TraceEnable Off 
 
평소에 Apache를 사용하면서 조금 의문(?)을 가졌으나 그러려니 하며 넘어갔었던 부분입니다. 
 
 
 
 
이번에는 비슷한 방식으로 NginX 의 nginx.conf 에서 메소드 차단 설정을 해 보았습니다. 
 
server {
         location / {
                          if ($request_method !~ ^(GET|POST|HEAD)$ ) {
                           return 444;
                         }
               }
 
마찬가지로 GET, POST, HEAD 이외의 메소드는 허용하지 못하도록 설정하였고, 그 외의 메소드에 대해서는 
444 코드를 발생시키는 것으로 확인하.. 는 와중에 
 
TRACE 메소드에 대해서는 위의 설정과 무관하게 405 Method Not Allowed 가 나오는 것을 확인하였습니다. 
 
원인을 알아보니,  ngx_http_request.c 에서 아래의 내용을 찾을 수 있었습니다.
 
 if (r->method & NGX_HTTP_TRACE) {
             ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
                         "client sent TRACE method");
             ngx_http_finalize_request(r, NGX_HTTP_NOT_ALLOWED);
             return NGX_ERROR;
    }
 
NginX 에서는 nginx.conf 에서의 메소드 차단설정과는 무관하게 TRACE 메소드를 허용하지 않는 것이었습니다.
 
 
 
NginX 에서의 기본적인 메소드 차단설정을 알아보는 중에.. 반대로 TRACE 메소드의 필요시 허용은 어떻게 해야 하는지 더 궁금해졌습니다. 
 
감사합니다.