설명
예외 메시지, 스택 트레이스, SQL 오류, 내부 경로 같은 세부 정보를 사용자 응답에 그대로 포함하면 공격자가 시스템 구조와 취약한 입력 지점을 파악할 수 있습니다. 운영 환경에서는 내부 오류를 일반화하고 상세 정보는 서버 측 로그에만 기록해야 합니다.
잠재적 영향
- 내부 파일 경로, 클래스명, 쿼리 구조 노출
- 취약점 탐색과 공격 자동화 지원
- 민감한 데이터가 포함된 예외 메시지 노출
해결 방법
- 사용자 응답에는 일반화된 오류 메시지만 반환합니다.
- 상세 예외 정보는 접근 제어된 서버 로그에 기록합니다.
- 프레임워크의 디버그 오류 페이지와 상세 오류 응답을 운영에서 비활성화합니다.
예시
변경 전
java
catch (Exception e) {
response.getWriter().write(e.getMessage());
}
변경 후
java
catch (Exception e) {
logger.warn("request failed", e);
response.sendError(500, "Internal server error");
}
설명:
- 변경 전: 예외 메시지(
getMessage,getLocalizedMessage)를 HTTP 응답 본문이나 에러 응답에 그대로 포함하면 내부 파일 경로, SQL 오류, 구성값, 라이브러리 동작 단서 같은 민감한 구현 정보가 외부에 노출될 수 있습니다. - 변경 후: 예외 상세 메시지는 서버 로그에만 기록하고, 클라이언트에는 일반화된 오류 메시지만 반환합니다.