IT 성장일기

[Tomcat] maxParameterCount 속성은 정말 중요하다. 본문

Server/Tomcat

[Tomcat] maxParameterCount 속성은 정말 중요하다.

고 양 2024. 7. 15. 17:31
반응형
maxParameterCount

Tomcat을 사용하는 경우 server.xml 파일 내 Connector 태그에서 확인할 수 있는 이 속성은 HTTP 요청에서 허용되는 최대 매개변수 개수를 지정하는 데 사용됩니다. 이 속성은 보안상의 이유로 설정되곤 하는데, 매우 큰 값으로 설정할 경우 서비스 거부(DoS) 공격에 취약해질 수도 있다고 합니다.

 

 

문제가 뭐였는데요?

고객사 서버 상에서 솔루션 데이터 세팅을 위해 웹애플리케이션 사용 중 HTTP 요청이 막히는 문제가 있었습니다.

 

소스나 데이터베이스 상에서는 아무런 문제가 없었고 애플리케이션 로그에도 아무런 기록이 남지 않았으며 브라우저 console에서도 아무 기록을 확인할 수가 없었습니다.

 

가장 끔찍한 현실은 소스와 데이터베이스를 회사 로컬 PC에 그대로 복원하여 테스트할 경우 문제가 발생하지 않았다는 것🤯

 

그러던 중 오늘, 얼마 전 해당 서버의 톰캣 버전을 변경했다는 사실을 떠올렸고, 이게 원인이 아닐까 하는 생각이 들어 톰캣 로그를 뒤져보았습니다. 아니나 다를까. 유레카... 아래와 같이 한계 값을 초과하는 파라미터가 탐지되었다는 내용을 발견했습니다.

ConnectormaxParameterCount라는 키워드는 톰캣 설정 파일 중 server.xml 파일에서 확인할 수 있었기에

해당 파일을 바로 열어보기로 했습니다.

 

 

문제 해결!

기존 사용하던 7 버전의 server.xml 파일에서는 maxParameterCount속성이 아예 빠져있었고,

새로 사용하게 된 9 버전의 같은 파일에는 해당 속성 값이 1000으로 설정되어 있었습니다.

/*Tomcat 7*/
<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="2000 redirectPort="443" />
    
/*Tomcat 9*/
<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000" redirectPort="8443"
    maxParameterCount="1000" />

 

문제가 된 화면은 한 번의 요청 시 2000개가 넘는 Parameter를 전송하는 화면이었고 server.xml 파일엔 값이 1000으로 정해져 있었기 때문에 이와 같은 현상이 발생했던 것이었습니다.

 

앞서 서술했던 보안상의 이유도 있기 때문에 maxParameterCount 값을 5000으로 설정하고 톰캣을 재기동하니,

지금까지 발생했던 오류가 더 이상 발생하지 않게 되었습니다.

 

마치며

이 문제를 발견하고 나서 원인을 찾아내느라 고생을 많이 했는데, 고생한 만큼 귀중한 경험이 된 케이스였습니다.

maxParameterCount 설정 시 주의할 사항을 나열하면서 마치도록 하겠습니다.

 

maxParameterCount 설정 시 주의사항

  • 지나치게 큰 값으로 설정하게 될 경우 공격자가 대량의 매개변수를 보내 서버 자원을 고갈시킬 수 있다.
  • 애플리케이션이 실제로 요구하는 값의 범위를 고려하여 설정하여야 한다.
  • 너무 적은 값으로 설정하면 문제가 없는 정상적인 요청이 차단될 수 있으므로 주의해야 한다.
반응형