2.7 KiB
2.7 KiB
Multipart 업로드 1GB 상한 유지 — 리스크 문서화
결정: multipart 상한 1GB 유지 (사용자 확정, D-B4-multipart, sid 20260629-175705) 관련 체크리스트: security-remediation-checklist.md §B4
현재 설정
src/main/resources/application.properties:
spring.servlet.multipart.max-file-size=1GB
spring.servlet.multipart.max-request-size=1GB
리스크
DoS (Denial of Service)
- 악의적 클라이언트가 1GB 파일 업로드를 동시에 여러 건 요청하면 서버 처리 스레드·메모리·디스크 I/O를 소진할 수 있다.
- Spring MVC 기본 설정에서 multipart 파싱은 요청 완료 전까지 임시 파일(
java.io.tmpdir)에 버퍼링된다. - 임시 디스크 고갈 시 다른 기능(로그, 쓰기 연산)도 함께 영향받는다.
디스크 고갈
- 업로드 임시 경로(
/tmp또는 컨테이너 tmpfs)와 저장 경로(~/.bibimbap/uploads)가 모두 대용량 파일로 채워질 수 있다. - 컨테이너 환경에서 tmpfs 상한이 낮으면 1GB 단일 파일에도 OOM 오류가 발생한다.
유지 결정 근거
- bibimbap 은 게임 WebGL 번들 업로드를 지원하며, 실제 게임 빌드 크기가 수백 MB에 이를 수 있다. 상한을 낮추면 합법적 업로드가 차단된다.
- 현재 운영 규모(소규모)에서 대규모 DoS 시도 가능성이 낮다고 사용자가 판단했다.
- 상한 축소·업로드 스트리밍 개선은 이후 운영 부하 확인 후 별도 검토.
완화 권고 (추후)
| 권고 항목 | 설명 |
|---|---|
| 리버스 프록시 상한 설정 | nginx client_max_body_size 또는 AWS ALB 요청 크기 제한으로 애플리케이션 앞단 차단 |
| 디스크 모니터링 | 업로드 경로(~/.bibimbap/uploads) 및 tmpdir 사용량 alert 설정 (예: 80% 도달 시 알림) |
| 업로드 인증 게이트 | 현재 게임 업로드는 로그인 필수 — 익명 대용량 업로드 차단. 권한 검사 유지 확인. |
| 동시 업로드 rate limit | Spring MVC thread pool 또는 리버스 프록시 connection limit으로 동시 대용량 요청 제한 |
| tmpdir 분리 | spring.servlet.multipart.location 으로 tmpdir를 전용 볼륨으로 분리해 시스템 영향 격리 |
관련 문서
- owasp-dependency-check-guide.md — 동일 B4 트랙 CVE 스캔 설정
- security-remediation-checklist.md — 전체 보안 체크리스트
- ../maintenance/post-deploy-verification-checklist.md — 배포 후 디스크 확인 절차