bibimbap/docs/security/multipart-size-risk.md

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를 전용 볼륨으로 분리해 시스템 영향 격리

관련 문서