본문 바로가기
프로그래밍/네트워크, 보안

Tomcat HTTP 메소드 제한하기

by pentode 2018. 4. 17.

HTTP 규약에 따라 웹서버들은 GET, POST, HEAD, PUT, OPTIONS, DELETE, TRACE의 7개 메소드를 제공합니다.


요즘은 이러한 메소드들은 보안 취약점이 생길 수 있으므로 GET과 POST를 제외한 나머지 메소드들을 비활성화합니다. Tomcat에서 GET과 POST 를 제외한 메소드들을 비활성화 하는 방법을 알아보겠습니다.



web.xml<security-constraint> 항목을 추가 합니다. url-pattern/* 이므로 모든 요청에 대해 아래에 나열에 메소드들을 비활성화 합니다.


<security-constraint>
    <web-resource-collection>
    <web-resource-name>Restricted methods</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
        <http-method>DELETE</http-method>
        <http-method>OPTIONS</http-method>
        <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>


실제로 이러한 메소드들이 동작을 하는지 알아보는 방법으로는 명령창에서 telnet 명령으로 직접 호출해보는 방법이 있습니다.


- 명령창에서 C:\>telnet localhost 8080 을 입력합니다.

- 화면에 아무것도 보이지 않습니다. 이 상태에서 TRACE / HTTP/1.0 을 입력하고, 엔터키를 두 번 누릅니다. 입력한 내용도 보이지 않습니다. 실제로 Windows의 telnet은 자국반향(local echo)를 키는 방법이 있지만 글자가 겹쳐보여서 안보이지만 그냥 사용하는게 더 편한것 같습니다.





Tomcat 5 인가 부터는 TRACE 메소드가 기본적으로 비활성화 되었던것 같습니다. 혹시나 활성화 할 필요가 있다면 server.xml 파일의 <Connector> 에서 allowTrace="true"로 설정합니다. 이 값이 없거나 "false" 이면 비활성화입니다.


<Connector URIEncoding="UTF-8"
connectionTimeout="20000"
port="8080"
protocol="HTTP/1.1"
redirectPort="8443"
allowTrace="true" />


Tomcat 은 위의 GET, POST, HEAD, PUT, OPTIONS, DELETE, TRACE의 7가지 메소드외에 존재하지 않는 HTTP Method 를 보내면 GET 방식으로 처리해 버리는것 같습니다.


웹서버 마다 HTTP METHOD를 제한하는 방법은 다를 수 있습니다. Apache 웹서버의 경우는 mod_rewrite 모듈을 사용해서 제한합니다.

반응형