보안 고려사항 및 향후 강화 계획
이 문서는 vivid-ai 프로젝트의 인증 및 전반적인 보안 강화를 위해 향후 고려하고 구현해야 할 사항들을 정리합니다.
1. Refresh Token 도입
- 현황: 현재
accessToken은 1시간의 만료 시간을 가지며, 만료 시 재로그인(이메일/비밀번호)이 필요합니다. - 목표: 사용자 경험을 개선하고
accessToken탈취 시 위험을 줄이기 위해accessToken과refreshToken을 분리하여 관리합니다. - 세부 계획:
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 화이트리스트를 적용합니다.
- 온체인 트랜잭션 수신자/금액 검증과 함께 네트워크 검증을 필수 단계로 포함합니다.