Skip to content

fix: 출시 전 보안 점검 P0/P1 이슈 수정 - #20

Open
manNomi wants to merge 2 commits into
feature/gcp-deployfrom
fix/pre-launch-security-hardening
Open

fix: 출시 전 보안 점검 P0/P1 이슈 수정#20
manNomi wants to merge 2 commits into
feature/gcp-deployfrom
fix/pre-launch-security-hardening

Conversation

@manNomi

@manNomi manNomi commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Summary

  • dev DB 테스트 라우트(/v1/dev/db-test-records)를 production에서 등록 자체를 막고, 비-production에서도 인증 필수로 전환 (무인증 DB 쓰기 차단)
  • 업로드 사진 정적 서빙(/uploads)을 제거하고, 소유권/공개여부를 서버가 판정하는 GET /v1/uploads/:fileId로 교체. path traversal 전수 차단, 파일 매직바이트로 Content-Type 판별(확장자·클라이언트 MIME 불신), 업로드 단계 MIME 화이트리스트, 존재하지 않는 파일과 권한 없는 파일을 동일한 404로 응답해 존재 여부 비노출
  • /v1/auth/login|register|refresh에 계정(ip+email) + IP 단독 이중 rate limit 적용 — 단일 계정 브루트포스와 크리덴셜 스터핑 모두 방어
  • 이미지 교체(updateMomentLogPhoto) 트랜잭션 실패 시 새로 업로드된 파일이 정리되지 않던 버그 수정, 그 외 생성/삭제 경로의 고아 파일 정리 보강
  • UPLOAD_PUBLIC_PATH 등 사문화된 설정 제거

Test plan

  • pnpm run typecheck
  • pnpm test:api (mock DB, CI와 동일 조건) — 43 passed / 1 pre-existing failure(handles recap APIs, 이 브랜치 이전부터 실패, 무관) / 14 skipped(mock 모드에서 업로드 접근제어 테스트는 실 DB 필요)
  • 실제 Postgres 대상 전체 실행 — 57 passed / 1 pre-existing failure. 업로드 접근제어 16건(소유자 조회, 타인 거부, 미인증 거부, traversal 변형 전수, DB 레코드 없는 실파일, Content-Type/nosniff, MIME 화이트리스트, 고아 파일 정리) 전부 통과
  • node scripts/check-production-env.mjs — 약한 프로덕션 설정(rate limit 비활성, HTTP 업로드 URL 등)을 정확히 거부하는지 확인

Known follow-up (이 PR 범위 밖)

  • CI(pr-check.yml)가 USE_MOCK_DB=true로 돌아 업로드 접근제어 테스트가 mock 모드에서 skip됨 — 실 DB 대상 CI 잡 추가 권장
  • POST /v1/travel-sessions에 idempotency 보호가 없어 네트워크 재시도 시 고아 세션 생성 가능성 남음(사용자 영향 없음, 별도 작업 필요)

🤖 Generated with Claude Code

manNomi and others added 2 commits August 1, 2026 18:57
- dev DB 테스트 라우트를 production에서 제거하고 비-production에서도 인증 필수화
- 업로드 사진 조회를 소유권/공개여부 기반 인증 엔드포인트(GET /v1/uploads/:fileId)로 전환,
  path traversal 차단, 매직바이트 기반 Content-Type 검증, 업로드 MIME 화이트리스트 적용
- 로그인/회원가입/refresh에 계정+IP 이중 rate limit 적용
- 이미지 교체 시 고아 업로드 파일 정리 로직 보강

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant