49 lines
2.7 KiB
Markdown
49 lines
2.7 KiB
Markdown
# Multipart 업로드 1GB 상한 유지 — 리스크 문서화
|
|
|
|
**결정**: multipart 상한 1GB 유지 (사용자 확정, D-B4-multipart, sid 20260629-175705)
|
|
**관련 체크리스트**: [security-remediation-checklist.md §B4](./security-remediation-checklist.md#b4-의존성세션운영-하드닝)
|
|
|
|
## 현재 설정
|
|
|
|
`src/main/resources/application.properties`:
|
|
|
|
```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](./owasp-dependency-check-guide.md) — 동일 B4 트랙 CVE 스캔 설정
|
|
- [security-remediation-checklist.md](./security-remediation-checklist.md) — 전체 보안 체크리스트
|
|
- [../maintenance/post-deploy-verification-checklist.md](../maintenance/post-deploy-verification-checklist.md) — 배포 후 디스크 확인 절차
|