파일 업로드는 흔한 기능이지만 상당한 보안 위험입니다 — 악의적인 파일은 코드 실행, malware 배포, 시스템 침해로 이어질 수 있습니다. 업로드를 보호하려면 파일 타입, 크기, 콘텐츠를 검증하고, 파일을 안전하게 저장하며, 신중하게 제공해야 합니다.
파일 업로드의 위험
사용자가 파일을 업로드하게 허용하는 것은 보호되지 않으면 위험하다:
✗ MALICIOUS 실행/스크립트 파일 → 서버에서 실행될 수 있음(예: web
shell / 실행되는 스크립트 업로드 → 서버 침해)
✗ MALWARE 배포(다른 사용자에게 제공되는 파일)
✗ 과대 크기 파일 → 서비스 거부(디스크/메모리 고갈)
✗ 파일명의 경로 순회(../../) → 시스템 파일 덮어쓰기
✗ 오해의 소지가 있는 타입/콘텐츠의 파일(실제로는 스크립트인 .jpg)
파일 업로드 보호하기
✓ 파일 TYPE 검증 → 실제 CONTENT/MIME 확인(거짓말하는 확장자만이 아님);
허용 타입을 ALLOWLIST(블록리스트 금지); 나머지는 모두 거부
✓ 파일 SIZE 제한 → 리소스 고갈 방지(최대 업로드 크기)
✓ 업로드를 실행하지 마라 → 웹 루트 OUTSIDE에 저장; 실행 가능한 디렉터리에서
절대 제공하지 마라; 핸들러를 통해 제공(직접 실행 불가)
✓ 파일 RENAME(무작위/생성된 이름) → 경로 순회와 덮어쓰기 회피; 파일명 정화
✓ 적절한 곳에서 malware SCAN; 제공 시 올바른 Content-Type/Content-Disposition 설정
✓ 사용자 파일에 별도 storage/도메인 또는 객체 storage(S3) 사용; 접근 제어
