설명
비밀번호, 토큰, 세션 ID, API 키, 개인정보 같은 민감한 값을 평문으로 로그에 기록하면 로그 수집기, 운영 콘솔, 파일 백업, 장애 분석 도구를 통해 값이 노출될 수 있습니다. 로그는 애플리케이션 데이터베이스보다 더 넓은 권한으로 공유되는 경우가 많아 별도 보호가 필요합니다.
잠재적 영향
- 인증 정보와 세션 토큰 노출
- 개인정보 침해
- 장기 보관 로그를 통한 지속적 위험
해결 방법
- 민감 정보는 로그에 남기지 않습니다.
- 진단에 꼭 필요한 경우 비밀값 대신 고정된 마스킹 문자열이나 별도 추적 ID를 기록하세요. 단순 해시만으로 비밀값이 안전해지는 것은 아닙니다.
- 로그 접근 권한, 보존 기간, 전송 암호화를 함께 관리합니다.
예시
로거와 변수 선언을 생략한 발췌입니다. 변경 후의 userId도 개인정보일 수 있으므로 기록 필요성, 접근 권한과 보존 기간을 확인하세요.
변경 전
java
logger.info("password={}", password);
logger.debug("token={}", accessToken);
변경 후
java
logger.info("login attempt for userId={}", userId);
logger.debug("token present={}", accessToken != null);
설명:
- 변경 전: 비밀번호, 토큰, 세션 식별자, API 키 같은 민감 정보를 로그 파일이나 표준 출력에 남기면 로그 접근 권한만으로도 계정 탈취나 내부 정보 노출로 이어질 수 있습니다.
- 변경 후: 비밀번호, 토큰, 세션 식별자, Authorization 값은 로그에 남기지 않습니다.