30장. 업로드를 별도 보안 경계로 다룬다
클라이언트가 image/jpeg라고 말해도 신뢰하지 않는다. 서버는 업로드 의도를 만들 때 사용자·class 소유권, 최대 크기, 허용 확장자와 MIME을 확인하고 짧은 만료의 presigned URL을 발급한다. 완료 callback에서 object 존재·크기·checksum을 다시 보고, decoder가 읽을 수 있는지 quarantine worker에서 검사한다.
공개 URL에는 원래 파일명을 쓰지 않고 무작위 key를 사용한다. EXIF 위치정보 제거, thumbnail 재인코딩, 악성 payload와 압축 폭탄 제한, 삭제·보존 정책을 정한다. private 원본과 public derivative bucket을 나누고 CDN origin access만 허용한다.
실패 실습은 11MB 초과, 확장자만 jpg인 text, 깨진 JPEG, 다른 host의 upload completion, 만료 URL, 동일 checksum 재전송이다. 성공 화면보다 거부 status와 object 잔여물이 없는지 확인한다.