에러 유도 시 에러 페이지 내 불필요한 정보(서버 버전 정보, 시스템 절대 경로, 스택 트레이스 등)가 노출되는지 확인
테스트 방법:
존재하지 않는 페이지 접근: https://example.com/nonexistent-page
잘못된 파라미터 전송: https://example.com/search?q=<script>
긴 URL 입력: https://example.com/ + 4000자 이상의 문자열
특수문자 포함 요청
3. 조치 방법
1. Apache 서버
httpd.conf 또는 apache2.conf 파일 수정:
1
2
3
4
5
6
7
8
9
# 응답 헤더 내 서버 버전 정보 제거ServerTokens Prod
ServerSignatureOff# 사용자 정의 에러 페이지ErrorDocument404/errorpages/404.htmlErrorDocument500/errorpages/500.htmlErrorDocument403/errorpages/403.htmlErrorDocument503/errorpages/503.html
2. Nginx 서버
nginx.conf 파일 수정:
1
2
3
4
5
6
7
8
9
10
11
12
13
http{# 응답 헤더 내 서버 버전 정보 제거
server_tokensoff;# 에러 페이지 매핑
error_page404/custom_404.html;error_page500502503504/custom_50x.html;location=/custom_404.html{root/var/www/html;internal;}}
3. Tomcat 서버
server.xml 파일 수정:
1
2
3
4
5
6
7
8
9
10
<!-- 응답 헤더 내 서버 버전 정보 제거 --><Connectorport="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"server=" "/><!-- 개발용 리포트 비활성화 --><ValveclassName="org.apache.catalina.valves.ErrorReportValve"showReport="false"showServerInfo="false"/>
@ControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(Exception.class)publicStringhandleError(Exceptionex,Modelmodel){// 로그에는 상세 에러 기록logger.error("Error occurred",ex);// 사용자에게는 일반적인 메시지만 표시model.addAttribute("errorMessage","서버 오류가 발생했습니다.");return"error/500";}}
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 개발 환경에서만 상세 에러 표시
if(defined('DEVELOPMENT_MODE')&&DEVELOPMENT_MODE){ini_set('display_errors',1);error_reporting(E_ALL);}else{ini_set('display_errors',0);error_reporting(0);}// 사용자 정의 에러 핸들러
functioncustomError($errno,$errstr){error_log("Error: [$errno] $errstr");echo"서버 오류가 발생했습니다. 관리자에게 문의해주세요.";returntrue;}set_error_handler("customError");