Skip to main content

보안 고려사항 및 향후 강화 계획

이 문서는 vivid-ai 프로젝트의 인증 및 전반적인 보안 강화를 위해 향후 고려하고 구현해야 할 사항들을 정리합니다.


1. Refresh Token 도입

  • 현황: 현재 accessToken은 1시간의 만료 시간을 가지며, 만료 시 재로그인(이메일/비밀번호)이 필요합니다.
  • 목표: 사용자 경험을 개선하고 accessToken 탈취 시 위험을 줄이기 위해 accessTokenrefreshToken을 분리하여 관리합니다.
  • 세부 계획:
    • accessToken: 짧은 만료 시간(예: 5분 ~ 15분)을 가지며 보호된 API 접근에 사용.
    • refreshToken: 긴 만료 시간(예: 7일 ~ 30일)을 가지며 accessToken 재발급에 사용. HttpOnly 쿠키에 저장하여 XSS 공격으로부터 보호.
    • 백엔드에 refreshToken을 발급하고 관리하는 로직(DB 저장, 만료 처리) 및 accessToken 재발급 API(POST /auth/refresh) 구현.

2. CSRF (Cross-Site Request Forgery) 보호 강화

  • 현황: SameSite=Lax 쿠키 설정으로 기본적인 CSRF 보호를 제공하고 있습니다.
  • 목표: POST 요청 등 특정 시나리오에 대한 CSRF 공격 방어를 강화합니다.
  • 세부 계획:
    • CSRF 토큰 (Double Submit Cookie Pattern): 백엔드에서 CSRF 토큰을 발급하고, 프론트엔드는 이 토큰을 요청 헤더에 포함하여 보냅니다. 백엔드는 요청 헤더의 토큰과 쿠키의 토큰을 비교하여 유효성을 검증하는 로직 구현.
    • csurf와 같은 라이브러리를 백엔드에 도입하고, 프론트엔드에서 토큰을 관리하고 요청에 포함하는 로직 추가.

3. Rate Limiting (속도 제한)

  • 현황: 현재 로그인 시도, 토큰 재발급 등 특정 API 엔드포인트에 대한 요청 수 제한이 없습니다.
  • 목표: 무차별 대입 공격(Brute-force attack)이나 서비스 거부 공격(DoS)으로부터 API를 보호합니다.
  • 세부 계획:
    • 특정 IP 주소 또는 사용자로부터 일정 시간 동안 허용되는 요청 수를 제한하는 정책 구현.
    • NestJS의 @nestjs/throttler와 같은 모듈을 사용하여 특정 라우트에 속도 제한 적용.

4. 입력 유효성 검사 강화 (Backend)

  • 현황: 인증 요청의 기본 유효성 검사(email, password)는 적용되어 있으나, 정책 기반 상세 검증이 추가로 필요합니다.
  • 목표: 이메일/비밀번호 인증 요청의 유효성 검사 규칙을 강화하여 잘못된 요청과 약한 자격 증명을 사전에 차단합니다.
  • 세부 계획:
    • email 형식 검증 및 정규화(소문자 처리, 공백 제거).
    • password 최소 길이/복잡도(대소문자, 숫자, 특수문자) 정책 적용.
    • 인증 DTO에 대한 class-validator 기반 커스텀 검증 규칙 추가.

5. 보안 헤더 (HTTP Security Headers)

  • 현황: 기본적인 HTTP 헤더만 사용 중입니다.
  • 목표: XSS, 클릭재킹 등 클라이언트 측 공격으로부터 웹 애플리케이션을 보호하기 위해 HTTP 보안 헤더를 강화합니다.
  • 세부 계획:
    • Content-Security-Policy (CSP), X-Frame-Options, X-Content-Type-Options 등과 같은 HTTP 보안 헤더를 응답에 포함.
    • helmet과 같은 미들웨어를 NestJS 애플리케이션에 적용.

6. 로깅 및 모니터링

  • 현황: 보안 관련 이벤트에 대한 상세 로깅 및 모니터링 시스템이 부재합니다.
  • 목표: 비정상적인 로그인 시도, 인증 실패, 토큰 재발급 요청 등 보안 관련 이벤트를 실시간으로 감지하고 대응할 수 있는 시스템 구축.
  • 세부 계획:
    • Winston 또는 Pino와 같은 로깅 라이브러리를 도입하여 상세 로그 기록.
    • AWS CloudWatch, Prometheus/Grafana 등과 연동하여 실시간 모니터링 및 알림 시스템 구축.

7. 결제(Web3) 특정 고려사항: Chain ID 검증

  • 현황: 결제 트랜잭션 검증 시, 사용자가 잘못된 블록체인 네트워크를 사용했는지에 대한 검증이 충분하지 않습니다.
  • 목표: 결제 검증 단계에서 의도된 블록체인 네트워크(Chain ID) 여부를 확인하여 오입금/오검증 위험을 줄입니다.
  • 세부 계획:
    • 결제 검증 로직에 허용 Chain ID 화이트리스트를 적용합니다.
    • 온체인 트랜잭션 수신자/금액 검증과 함께 네트워크 검증을 필수 단계로 포함합니다.