피드로 돌아가기
Secure File Uploads: Seven Checks and Why Each One Exists
Dev.toDev.to
Security

7단계 Defense in Depth 전략을 통한 Zero-Trust 파일 업로드 보안 아키텍처 구현

Secure File Uploads: Seven Checks and Why Each One Exists

Shakil Alam2026년 5월 1일16intermediate

Context

Client-side에서 제공하는 파일 확장자와 MIME Type에 의존하는 기존 검증 방식의 취약점 분석. 단순한 확장자 변조만으로 Webshell 업로드 및 Stored XSS 공격이 가능한 보안 공백 존재.

Technical Solution

  • Client 제공 정보의 불신을 전제로 한 7단계 독립 검증 파이프라인 구축
  • finfo 라이브러리를 활용한 서버 사이드 Binary 데이터 기반 MIME Type 직접 탐지
  • Extension과 Server-detected MIME Type 간의 상호 교차 검증을 통한 파일 변조 차단
  • uniqueName 전략을 통한 사용자 제어 문자열의 파일 시스템 경로 완전 배제
  • HTTP 직접 접근이 불가능한 storage/ 경로 저장 및 Controller를 통한 권한 제어 접근 설계
  • Magic Bytes 검증 단계 추가로 정교하게 조작된 Polyglot 공격 벡터 차단

- `getClientMimeType()`과 `getClientOriginalExtension()`의 서버 사이드 검증 필수 여부 확인 - 허용 리스트(Allowlist) 기반의 최소 권한 확장자 및 MIME Type 설정 적용 - 업로드 파일의 물리적 저장 경로와 HTTP 공개 경로(public/)의 완전한 분리 - 모든 업로드 엔드포인트에 전용 보안 Middleware 적용 및 권한 검사 로직 통합

원문 읽기