DOCS/troubleshooting/250818_happybell80_프론트엔드보안개선.md

3.7 KiB

프론트엔드 보안 개선 및 코드 정리

날짜: 2025-08-18
작업자: happybell80 & Claude
관련 프로젝트: frontend-customer

오후 4시 00분 - 보안 문제 발견

문제 상황

사용자가 브라우저 콘솔에서 민감한 정보가 노출되는 것을 발견:

  • 사용자 ID, 이메일, 이름 등이 console.log로 출력
  • 로그인/회원가입 시 비밀번호까지 콘솔에 표시
  • JWT 토큰 파싱 정보 노출

보안 위험성 평가

실제 위험도: 중간

  • 콘솔 로그는 로컬 브라우저에만 표시 (서버 전송 없음)
  • 주요 위험 시나리오:
    1. 화면 공유 중 노출
    2. 공용 PC에서 사용
    3. 스크린샷/녹화에 포함
    4. 제3자 스크립트의 console.log 가로채기

오후 4시 10분 - 코드 분석

발견된 문제점

  1. 민감 정보 로깅 (7개 위치)

    • auth-context.tsx:53: 토큰 복원 시 전체 사용자 정보
    • auth-context.tsx:98-102: 로그인 성공 시 모든 정보
    • chat-interface.tsx:108-113, 152-154: API 호출 디버깅
    • login-dialog.tsx:35, 41: 비밀번호 포함 로그 (가장 심각)
  2. 코드 품질 문제

    • 사용자 식별자 혼재: user_id, userId, username
    • JWT 파싱 실패 시 하드코딩 기본값 사용
    • 미사용 UI 컴포넌트 60개 이상

오후 4시 15분 - 보안 개선 작업

수정 내용

  1. console.log 제거 (7개 파일)
// Before
console.log('로그인 시도:', { email, password });
console.log('Auth restored from token:', { userId, email, name, username });

// After
// 모든 console.log 제거 또는 주석 처리
  1. JWT 파싱 실패 처리 개선
// Before - 하드코딩 기본값
setUser({
  id: 'user',
  email: 'user@example.com',
  name: 'User'
});

// After - 로그아웃 처리
localStorage.removeItem('auth_token');
localStorage.removeItem('user_id');
setUser(null);
  1. 에러 처리 개선
// Before
console.error('Auth check failed:', error);

// After
// 에러 로그 제거, 조용히 실패 처리

교훈

1. 개발 vs 프로덕션 환경 분리 필수

  • 환경변수로 로그 레벨 제어: NODE_ENV
  • 개발 환경에서만 디버그 로그 활성화
  • 빌드 시 자동 console.log 제거 설정

2. 민감 정보 처리 원칙

  • 절대 로그 금지: 비밀번호, 토큰, 개인정보
  • 최소 정보 원칙: 꼭 필요한 정보만 로그
  • 마스킹 처리: 이메일은 user@*** 형태로

3. 보안 검토 체크리스트

  • console.log 검색 및 제거
  • 민감 정보 노출 확인
  • 에러 메시지 점검
  • 하드코딩 값 제거

4. 프론트엔드 보안 모범 사례

// 조건부 로깅 (프로덕션에서 자동 제거)
if (process.env.NODE_ENV === 'development') {
  console.log('Debug info');
}

// 또는 커스텀 로거 사용
const logger = {
  debug: (...args) => {
    if (isDevelopment) console.log(...args);
  }
};

최종 결과

수정된 파일

  1. auth-context.tsx - 6개 console 문 제거
  2. login-dialog.tsx - 2개 console 문 제거 (비밀번호 로그)
  3. chat-interface.tsx - 5개 console 문 제거
  4. robeing-api.ts - 1개 console 문 제거
  5. dos-terminal.tsx - 1개 console 문 제거
  6. confetti.tsx - 3개 console 문 제거

보안 개선 효과

  • 민감 정보 콘솔 노출 완전 차단
  • JWT 파싱 실패 시 안전한 로그아웃
  • 프로덕션 환경 준비 완료

추가 권장사항

  1. 즉시 적용: Vite 빌드 설정에 console 제거 플러그인 추가
  2. 중기 계획: 로깅 라이브러리 도입 (winston, pino)
  3. 장기 계획: 보안 감사 자동화 (ESLint 규칙)