본문 바로가기
서비스 웹 서비스 개발 앱 개발 AI 알고리즘 개발 AI 컨설팅 AI 마케팅 프로젝트 인사이트 회사소개 고객게시판
보안 엔지니어링 8 MIN READ

파일 업로드가 끝나도 바로 열지 마세요: 검역·검사·다운로드 승인 설계

고객이 올린 문서를 저장했다고 곧바로 공개하지 않고 검역, 악성코드 검사, 안전한 다운로드 권한까지 연결하는 B2B 파일 처리 구조.

Category
보안 엔지니어링
Published
Read
8분
Author
네이처프랙탈
파일 업로드가 끝나도 바로 열지 마세요: 검역·검사·다운로드 승인 설계 대표 이미지

고객지원 게시판이나 계약 관리 화면에서 사용자가 첨부파일을 올리면 서버는 ‘업로드 성공’을 돌려줍니다. 하지만 파일을 받았다는 사실은 그 파일이 안전하다는 뜻이 아닙니다. 이미지 확장자를 가진 다른 형식의 파일일 수도 있고, 문서 안에 악성 내용이 있을 수도 있습니다. 저장 직후 공개 링크가 만들어지면 검사가 끝나기 전에 다른 직원이 내려받을 수 있습니다.

업로드 수락과 사용 승인 사이에 검역 상태를 두는 것이 출발점입니다. 이 글은 서버를 거치지 않는 대용량 업로드 방식 자체보다, 파일이 도착한 이후 어떤 조건에서 읽을 수 있게 할지를 다룹니다.

상태를 분리하면 위험이 보인다

파일 레코드의 상태를 수신 중, 검역 대기, 검사 중, 안전 판정, 거부, 검사 실패로 나눕니다. 최초 업로드는 공개 웹 경로가 아닌 비공개 저장 위치에 둡니다. 사용자가 올린 원래 파일명은 화면 표시용으로만 보관하고, 실제 저장 키는 충돌하기 어려운 내부 식별자를 씁니다. 파일 ID만 추측해도 내려받을 수 있는 구조는 피해야 합니다.

업로드 직후에는 크기, 허용 확장자, 실제 콘텐츠 형식, 압축 해제 예상 용량을 확인합니다. 확장자와 HTTP Content-Type은 사용자가 보낼 수 있으므로 신뢰할 수 없습니다. 압축 파일은 내부 항목 수와 압축 해제 크기 제한을 함께 둡니다. OWASP 파일 업로드 가이드는 형식 제한, 비공개 저장, 악성코드 검사와 문서 유형에 따른 콘텐츠 무해화 등을 함께 권합니다.

업로드 파일을 비공개 검역소에 넣고 유형 검사와 악성코드 검사를 거쳐 공개 여부를 결정하는 흐름
업로드 완료와 다운로드 허용은 서로 다른 상태다.

검사가 끝나기 전에는 누구도 내려받지 못하게

악성코드 검사 작업을 큐에 넣었다면 사용자 화면에는 ‘업로드 완료·검사 중’이라고 표시합니다. 업무 처리 완료라고 표현하면 안 됩니다. 스캐너가 응답하지 않거나 검사 제한 시간을 넘으면 파일은 계속 비공개로 남아 있어야 합니다. 검사 실패를 ‘문제 없음’으로 자동 변환하는 정책은 가장 위험합니다. 재시도와 운영자 확인 경로를 따로 마련합니다.

검사 결과가 정상이라도 문서 파서나 미리보기 생성기가 안전하다고 단정할 수는 없습니다. 복잡한 형식을 열어야 한다면 격리된 처리 환경에서 리소스 제한을 걸고, 필요 시 문서 무해화 또는 이미지 재인코딩을 고려합니다. 파일 처리 라이브러리의 보안 업데이트도 운영 범위에 포함됩니다.

안전한 파일에도 접근 권한은 필요하다

검사를 통과한 파일을 모두에게 공개하는 것은 별개의 보안 사고입니다. 다운로드 요청 시 로그인 사용자와 조직, 업무 레코드의 열람 권한을 다시 확인합니다. 외부 저장소 URL을 제공한다면 짧은 유효기간으로 발급하고, 공유된 링크가 영구적인 공개 주소가 되지 않게 합니다. 응답 헤더는 브라우저가 실행 가능한 내용을 임의로 렌더링하지 않도록 파일 유형과 다운로드 정책에 맞게 설정합니다.

삭제 요청, 보관 기간 만료, 권한 변경도 파일과 메타데이터에 함께 반영되어야 합니다. DB에서는 첨부가 지워졌는데 오브젝트 저장소의 파일만 남는 상황을 피하려면 주기적인 대사 작업이 필요합니다. 조직이 다른 사용자가 파일 ID를 바꿔 요청하는 테스트도 반드시 수행합니다.

검사 지연·실패 파일은 격리하고 정상 파일만 권한을 확인한 뒤 짧은 다운로드 경로로 제공하는 흐름
검사 실패를 안전 판정으로 간주하지 않는 것이 핵심이다.

운영 지표와 예외 절차

검사 대기 시간, 실패율, 재시도 건수, 거부 사유, 검역소 저장 용량, 공개 전 다운로드 차단 건수를 봅니다. 스캐너 장애가 길어지면 파일 사용이 지연되므로 업무 담당자에게 지연 사유와 재개 예상 경로를 알려야 합니다. 반대로 보안을 이유로 운영자가 임의로 ‘검사 생략’ 상태를 만들면 통제 자체가 무너집니다. 긴급 예외가 필요하다면 승인자와 사후 기록을 남기는 제한된 절차로 다뤄야 합니다.

출시 전 체크리스트

  1. 업로드 원본을 비공개 검역 위치에 저장한다.
  2. 확장자·실제 형식·크기·압축 해제 한도를 검사한다.
  3. 스캔 실패나 시간 초과에는 공개를 허용하지 않는다.
  4. 정상 판정 뒤에도 다운로드 권한을 매번 확인한다.
  5. 삭제·보관 기간·저장소 잔존 파일을 대사한다.

파일 업로드의 성공 기준은 바이트가 저장됐는지가 아닙니다. 검증 전에는 격리되고, 검증 후에도 올바른 사람만 접근하며, 나중에 삭제까지 설명할 수 있는지가 실제 완료 기준입니다.

#파일업로드보안 #악성코드검사 #파일검역 #첨부파일보안 #다운로드권한 #B2BSaaS #웹보안 #문서보안 #업로드설계 #보안엔지니어링

API 데이터 보안 보안

/ 다음 단계

이런 문제, 직접 겪고 계신가요?

글로 정리한 방법을 실제 환경에 맞춰 적용하는 일까지 함께 하겠습니다.

영업일 기준 3일 이내 회신 · 상담 및 범위 견적 무료