설명
비밀번호, 토큰, API 키, 세션 식별자 같은 민감 정보를 로그에 그대로 기록하면 로그 수집기, 콘솔 출력, 운영 대시보드, 에러 리포트에 비밀 값이 남을 수 있습니다. 로그는 애플리케이션 데이터보다 더 넓게 공유되거나 장기간 보관되는 경우가 많아 계정 탈취와 권한 상승의 출발점이 될 수 있습니다.
잠재적 영향
- 운영 로그, 중앙 수집 시스템, 에러 리포트에 인증 정보가 장기간 보관될 수 있습니다.
- 로그 접근 권한을 가진 사용자가 토큰이나 API 키를 재사용해 계정을 탈취할 수 있습니다.
- 사고 대응 시 로그 공유 과정에서 민감 정보가 추가로 유출될 수 있습니다.
해결 방법
- 민감 값은 로그에 기록하지 말고 필요한 경우 고정된 마스킹 문자열이나 추적용 ID만 남기세요.
- 공통 redaction helper를 사용해
password,token,secret,apiKey,authorization,cookie같은 필드를 중앙에서 제거하세요. - 구조화 로그를 사용할 때도 기록할 필드를 허용 목록으로 제한하고 민감 필드는 제외하세요.
stdout과stderr로 직접 출력되는 값도 운영 로그로 수집될 수 있으므로 동일하게 제한하세요.
예시
getTokenId는 애플리케이션에서 구현할 도우미입니다. 인증에 재사용할 수 없는 추적 식별자만 반환해야 하며, 토큰 검증과 로그 접근·보관 제한도 별도로 적용해야 합니다.
변경 전
javascript
function login(req) {
const token = req.headers.authorization;
console.info("login token", token);
}
변경 후
javascript
function login(req) {
const tokenId = getTokenId(req.headers.authorization);
console.info("login token accepted", { tokenId });
}
설명:
- 변경 전: 인증 토큰 전체를 로그에 남겨 로그 접근자가 토큰을 재사용할 수 있습니다.
- 변경 후: 실제 비밀 값 대신 추적 가능한 식별자만 기록합니다.