오류 메시지 정보 노출

예외 메시지 노출

설명

예외 메시지, 스택 트레이스, SQL 오류, 내부 경로 같은 세부 정보를 사용자 응답에 그대로 포함하면 공격자가 시스템 구조와 취약한 입력 지점을 파악할 수 있습니다. 운영 환경에서는 내부 오류를 일반화하고 상세 정보는 서버 측 로그에만 기록해야 합니다.

잠재적 영향

  • 내부 파일 경로, 클래스명, 쿼리 구조 노출
  • 취약점 탐색과 공격 자동화 지원
  • 민감한 데이터가 포함된 예외 메시지 노출

해결 방법

  1. 사용자 응답에는 일반화된 오류 메시지만 반환합니다.
  2. 상세 예외 정보는 접근 제어된 서버 로그에 기록합니다.
  3. 프레임워크의 디버그 오류 페이지와 상세 오류 응답을 운영에서 비활성화합니다.

예시

변경 전

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 오류, 구성값, 라이브러리 동작 단서 같은 민감한 구현 정보가 외부에 노출될 수 있습니다.
  • 변경 후: 예외 상세 메시지는 서버 로그에만 기록하고, 클라이언트에는 일반화된 오류 메시지만 반환합니다.

참조