6단계
6단계 — 업로드 파일을 검증하고 원자적으로 공개하기
0회 조회
목차
6단계 — 업로드 파일을 검증하고 원자적으로 공개하기
파일명과 Content-Type은 사용자가 주장하는 값일 뿐입니다. 공개 파일은 저장 전에 실제 바이트·크기·확장자·무결성을 확인하고, 공개 디렉터리에 반쪽짜리 파일이 보이지 않게 해야 합니다.
최소 경계
- 허용 MIME과 최대 크기를 먼저 검사합니다.
- PNG/JPEG/WebP/GIF/AVIF 같은 실제 signature를 확인합니다.
- 랜덤 임시 파일을 같은 디렉터리에 배타적으로 쓰고
rename으로 원자 교체합니다. - SHA-256과 결과를 감사 로그에 남기되 원본 파일·민감 값을 로그에 넣지 않습니다.
- 사용자 비공개 파일은 공개 bind mount와 분리하고, 검증 실패 파일은 quarantine에서 만료 정리합니다.
Codingstairs의 Admin cover upload는 공개 CMS 자산이라 원본 포맷을 보존하지만 MIME+signature와 atomic rename을 적용합니다. 반면 Pryzeet 사용자 이미지는 별도의 sharp·private storage pipeline을 따릅니다. 두 의미를 하나의 업로드 helper로 섞으면 공개 범위와 삭제 책임이 흐려집니다.
실패 UX
잘못된 파일은 “업로드 실패”만 말하지 말고 지원 형식·크기 제한·재선택 방법을 알려 줍니다. 서버가 저장 전에 거부하면 사용자는 부분 파일과 오래된 캐시를 보지 않습니다.