오류 메시지 정보 노출
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");
}