민감 정보의 평문 로그 기록

민감 정보의 평문 로그 기록

설명

비밀번호, 토큰, 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 });
}

설명:

  • 변경 전: 인증 토큰 전체를 로그에 남겨 로그 접근자가 토큰을 재사용할 수 있습니다.
  • 변경 후: 실제 비밀 값 대신 추적 가능한 식별자만 기록합니다.

참조