오류 메시지 정보 노출

Information Exposure Through an Error Message

시스템 내부 정보(스택 트레이스 등) 유출 위험

시나리오 상황 (Scenario)

사용자가 존재하지 않는 게시글을 요청하거나, DB 연결이 끊기는 등 예외(Exception)가 발생하는 상황입니다.
이때 서버가 사용자에게 어떤 응답을 보내는지에 따라 보안 취약점이 될 수 있습니다.

공격자의 관점:

"오류 메시지에 포함된 DB 버전, 쿼리 구조, 서버 경로, 라이브러리 버전 등을 수집하여 더 정교한 공격(SQL Injection, Exploit 등)을 설계할 수 있습니다."

목표 (Goal)

고의로 에러를 발생시켜(Trigger Error), 서버가 민감한 정보를 노출하는지 확인해보세요.

취약한 모드 (Vulnerable)

개발 편의를 위해 printStackTrace() 또는 원본 에러 메시지를 그대로 출력함

Browser Window
[에러 유발] 버튼을 눌러주세요.

안전한 모드 (Secure)

내부 로그에는 기록하되, 사용자에게는 정제된 일반 메시지만 보여줌

Browser Window
[에러 유발] 버튼을 눌러주세요.

백엔드 예외 처리 비교 (Backend Exception Handling)

Java

// Vulnerable

try {
    ...
} catch (Exception e) {
    // 스택 트레이스를 그대로 웹 화면에 출력
    e.printStackTrace(response.getWriter());
}
Java

// Secure

try {
    ...
} catch (Exception e) {
    // 내부에만 로그 기록
    logger.error(e);
    // 사용자에게는 약속된 메시지/페이지 전달
    response.sendRedirect("/error/500.jsp");
}