반응형

불필요한 메서드 제한


클라이언트에서 GET, POST 이외의 method 로 

작업 요청 시 보안문제가 발생할 수 있으며


PUT, DELETE 등의 method 로 인해 파일 변조 및 

삭제를 당하는 등 악의적인 이용으로 피해가 발생할 수 있습니다.



HTTP Method 란?


 - HTTP 메서드는 서버가 http 요청을 어떻게 처리하는지 지시해주는 필드이며

   서버는 HTTP method 에 Reuqest-URI 에 대해 다른 동작을 수행할 수 있습니다.

   우리가 흔희 아는 GET POST 를 말합니다.


Method 종류



  • GET

 - Request-URI 요청에 필요한 정보를 모두 담는다

 - 재요청이 잦은 경우 유용 ( ex : 새로고침 )



  • POST

 - 요청에 필요한 정보들을 body 필드에 숨긴다.

 - 길이 제한 없으며 정보가 노출되지 않도록 사용한다.

 - Text 및 binary 데이터 전송 가능하다



  • DELETE

 - Request-URI 정보 삭제



  • PUT

 - 요청에 동봉된 정보를 저장한다.



  • OPTIONS

 - Request-URI 통신에 대한 정보 제공

 - 어떤 method 기능을 제공하는지 체크

 - URI 에 대한 기능적인 체크 동작 수행

 - Request-URI 에는 body 필드 정의하지 않아도 된다.



  • HEAD

 - 요청에 대한 응답 body 를 return하지 않고 헤더 정보만 return

 - 요청에 대한 유효성, 접근성을 확인할 때 사용



  • CONNECT

 - SSL tunneling 에 사용되는 method



  • TRACE

 - 클라이언트로부터 수신한 메시지를 응답에 포함시킨다.

 - TRACE 메서드 요청에는 요청 정보를 포함하는 URI 를 사용하면 안된다.








톰캣 web.xml 설정



   
    Protected
    /*
    PUT
    DELETE
    HEAD
    TRACE
    OPTIONS
   
   
    
   
  



  • 각 태그 설명


  1. security-constraint : web-resource-collection 내부에 정의된 방식의 요청을 제한
  2. url-pattern : 특정 디렉토리에 인증(제한)을 걸수 있게 pattern 지정
  3. auth-constraint : 모든 사용자 접근불가
  4. http-method : 인증(제한)할 메서드 지정

제한할 http-method 를 하나도 설정하지 않으면 url-pattern에 해당하는 모든 요청이 제한




아파치 httpd.conf 설정


  • 허용할 method 정의


<Directory />
 <LimitExcept GET POST>
  Order allow, deny
  deny from all
 </LimitExcept>
</Directory>



  • 제한할 method 정의


<Directory />
 <Limit PUT DELETE OPTIONS>
  Order allow,deny
  Allow from all
 </Limit>
</Directory>



Directory 태그를 사용하면 Directory 별로 모두 제한을 걸어줘야 하므로

URL pattern 을 이용하여 일괄적으로 제한하는 방법도 있습니다.



  • Location 을 통한 method 제한


<Location /*>
 <LimitExcept GET POST>
  Order deny,allow
  Deny from all
 </LimitExcept>
</Location>



  • Trace Method 처리 방법


LimitExcept 제한 시 정상적으로 제한되지 않아 TraceEnable off 를 사용합니다.

(https 프로토콜 사용 시 httpd-ssl.conf 파일에도 동일한 설정 필요합니다.)


TraceEnable off






불필요한 메서드 적용 확인 방법



위의 내용을 적용을 한 후 정상적으로 반영됐는지 확인해보는 방법입니다.



  1. cmd 창 오픈
  2. telnet localhost 80
  3. 아무것도 보이지 않는 상태에서 TRACE / HTTP/1.0 입력 후 엔터 두번 
( TRACE , GET , POST 등 http method 값을 넣어주면 각각의 메서드가 허용되는지 확인할 수 있습니다. )





  • 제한 적용 전


HTTP/1.1 403 Forbidden
Date: Thu, 10 Jan 2019 08:31:11 GMT
Server: Apache/2.0.64 (Unix)
Last-Modified: Wed, 19 Dec 2018 11:05:50 GMT
ETag: "35fc89-3c6-57d5aff2a1f80"
Accept-Ranges: bytes
Content-Length: 950
Connection: close
Content-Type: text/html




  • 제한 적용 후


HTTP/1.1 200 OK
Date: Thu, 10 Jan 2019 08:32:05 GMT
Server: Apache/2.0.64 (Unix)
Last-Modified: Wed, 19 Dec 2018 11:03:29 GMT
ETag: "35fca1-2b-53d2df2c3b260"
Accept-Ranges: bytes
Content-Length: 42
Connection: close
Content-Type: text/html


반응형
블로그 이미지

나남나여

일상 제품리뷰와 맛집/여행/사진을 좋아하고 IT 관련 프로그래밍 초급 & 고급 정보를 공유하는 블로그

,