
최근에 회사 솔루션에 보안취약점 리포트가 들어와서 패치를 하였는데 그중 하나가 에러 페이지에 Tomcat 정보가 보인다는 것이었다. 에러가 발생하였을 때 노출되는 에러 페이지에 Tomcat 버전이 그대로 보이면 공격자에게 힌트를 주는 셈이다. 이번엔 Tomcat에서 에러 페이지를 안전하게 설정하는 방법을 정리해봤다.
Tomcat 정보 숨기기
에러 메시지를 통해 노출되는 정보는 크게 두 가지다.
1. 응답 헤더에 서버 종류를 노출 (예 : Server: Apache-Coyote/1.1)
2. 에러 페이지에 서버의 정확한 버전 노출 (예 : Apache Tomcat/9.0.XX)
이런 정보들은 공격자가 알려진 취약점을 공략하는 데 사용할 수 있다.
1. 응답 헤더 정보 숨기기
<!-- server.xml -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
server="Web Server"
xpoweredBy="false" />
- server="Web Server"
- 이게 있어야 Server: Apache-Coyote/1.1 헤더가 Server: Web Server로 바뀜.
- xpoweredBy="false"
- X-Powered-By: Servlet/3.1 JSP/2.3 (Apache Tomcat/9.0.XX) 같은 헤더도 제거해야 함.
# 설정 전
Server: Apache-Coyote/1.1
X-Powered-By: Servlet/3.1 JSP/2.3 (Apache Tomcat/9.0.50)
# 설정 후
Server: Web Server
(X-Powered-By 헤더 제거됨)
2. 에러 페이지 버전 정보 숨기기
<!-- server.xml의 Host 섹션 -->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 기존 Valve 주석처리하고 새로 추가 -->
<Valve className="org.apache.catalina.valves.ErrorReportValve"
showReport="false"
showServerInfo="false" />
</Host>
속성 설명
| 속성 | 기본값 | 설명 |
| showServerInfo | true | 에러 페이지에 서버 정보(Tomcat 버전) 표시 여부 |
| showReport | true | 에러 페이지에 상세 에러 리포트(스택 트레이스 등) 표시 여부 |
이 설정만 해도 에러 페이지가 훨씬 깔끔해지고 정보 노출이 줄어든다!
커스텀 에러 페이지 설정
에러 코드별로 다른 페이지 설정
<!-- web.xml (프로젝트 또는 Tomcat 전역) -->
<error-page>
<error-code>404</error-code>
<location>/error/404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.html</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error/403.jsp</location>
</error-page>
Exception 타입별로 페이지 설정
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error/exception.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/null-pointer.jsp</location>
</error-page>
설정 파일 위치별 적용 범위
| 파일 위치 | 적용 범위 | 설명 |
| $CATALINA_HOME/conf/web.xml | Tomcat 전체 애플리케이션 | 모든 웹앱에 공통 적용 |
| 프로젝트/WEB-INF/web.xml | 해당 웹 애플리케이션만 | 개별 프로젝트 설정 |
전역 설정과 프로젝트 설정이 충돌하면 프로젝트 설정이 우선한다. 또한 에러페이지 우선순위는 구체적인 에러가 우선이 된다.
'Tomcat' 카테고리의 다른 글
| [Tomcat] Tomcat 실행 흐름 (feat.setenv.bat 파일) (0) | 2025.07.04 |
|---|---|
| [Tomcat] Tomcat의 war-tracker 파일 (0) | 2025.03.28 |
| [Tomcat] Tomcat > bin 디렉터리의 주요 파일 설명 (0) | 2025.02.11 |
| [Tomcat] tomcat - work directory (2) | 2023.03.09 |
| [Tomcat] 톰캣 하나에 여러 사이트 구축 (0) | 2023.03.07 |