최근 회사에서 기존 이미지 저장소를 대체하기 위한 새로운 이미지 저장 서비스 개발을 검토하게 되었습니다.

이미지를 저장하려면 먼저 파일 업로드 기능이 필요합니다. 하지만 현재 구현된 파일 업로드 기능과 관련된 소스코드를 리뷰해보니 기능의 정상적인 동작에 초점이 맞춰져 있었고, 예외 상황이나 보안 측면에 대한 고려는 부족해 보였습니다.

파일 업로드는 단순히 파일을 서버에 저장하는 것뿐만 아니라, 보안과 예외 상황까지 고려해야 하는 기능이기 때문입니다.


1. 안전한 파일 업로드

파일 업로드는 보편적인 기능입니다. 이번 기회에 회사에서 공통으로 사용할 수 있는 라이브러리를 만들어보고 싶었습니다. 이왕 만드는 것이라면 제대로 만들어보고 싶었습니다.

어떻게 만들어야 잘 만들었다고 할 수 있을까?라고 스스로에게 질문을 던져봤습니다.

가장 먼저 떠오른 것은 안전성이었습니다. 파일을 정상적으로 저장하는 것은 기본이고 악의적인 파일이나 비정상적인 요청으로부터 시스템을 보호할 수 있어야 하며, 예상하지 못한 오류가 발생하더라도 안정적으로 동작해야 한다고 생각했습니다.

결국 안전한 파일 업로드란 보안 위협에 대응하면서도 기능의 정확성과 안정성을 확보하는 것이라고 정리할 수 있었습니다.

이러한 조건을 충족하는 것이 팀원 누구나 안심하고 사용할 수 있는 공통 라이브러리를 만들기 위한 첫걸음이 될 것입니다.


2. 참고한 기술 가이드

기존에 알고 있던 개발 지식과 앞서 Java의 서비스 거부(DoS) 취약점을 학습하면서 살펴본 보안 원칙들도 파일 업로드 기능을 구현하는 데 도움이 될 것입니다.

📚 [학습기록] Java 개발자가 알아야 할 서비스 거부(DoS) 취약점
Oracle Secure Coding Guidelines for Java SE를 바탕으로 Java 애플리케이션에서 발생할 수 있는 서비스 거부(DoS) 취약점의 원인과 예방 방법을 학습하고 정리한 시리즈입니다.

하지만 안전한 파일 업로드에 필요한 요구사항을 체계적으로 도출하고, 그 근거를 다른 개발자들에게 설명하기에는 부족하다고 느꼈습니다.

그래서 참고할 만한 기술 가이드가 있는지 찾아보았고, OWASP와 KISA에서 제공하는 소프트웨어 보안 가이드를 확인할 수 있었습니다.

두 기관은 소프트웨어 보안 분야에서 널리 알려져 있으며, 관련 가이드를 참고한다면 파일 업로드 기능의 보안 요구사항을 도출하고 구현 방향을 결정하는 데 객관적인 근거가 될 수 있을 것입니다.

다만 안전한 파일 업로드는 보안성만으로 완성되지 않습니다. 파일 처리의 정확성과 예외 상황에 대한 안정성 역시 고려해야 합니다.

따라서 우선 OWASP와 KISA의 가이드를 통해 파일 업로드 과정에서 발생할 수 있는 보안 위협과 대응 원칙을 학습하고, 기능적 정확성과 안정성을 확보하기 위해 필요한 요구사항도 함께 정리해 보기로 했습니다.


3. 학습 방향

앞으로 학습할 내용을 크게 세 가지 관점으로 구분해 보았습니다.

구분 설명
보안성(Security) 악의적인 파일이나 비정상적인 요청으로부터 시스템을 보호할 수 있어야 합니다.
정확성(Correctness) 업로드한 파일이 의도한 대로 정확하게 처리되고 저장되어야 합니다.
안정성(Reliability) 예상하지 못한 오류가 발생하더라도 적절하게 대응하고 일관된 상태를 유지할 수 있어야 합니다.

이 세 가지는 서로 독립적인 요소라기보다 밀접하게 연결되어 있습니다.

예를 들어 파일 크기를 제한하는 것은 대용량 파일 업로드를 통한 서비스 거부(DoS) 공격을 방지하는 보안 대책이지만, 동시에 시스템 자원이 과도하게 사용되지 않도록 하여 서비스 안정성을 확보하는 방법이기도 합니다.

또한 파일 저장 과정에서 오류가 발생했을 때 불완전한 파일이 남지 않도록 처리하는 것은 기능의 정확성과 안정성 모두에 해당합니다.

앞으로는 보안성, 정확성, 안정성이라는 세 가지 관점에서 안전한 파일 업로드에 필요한 요구사항을 도출하고, 이를 구현하기 위한 방법을 학습해 보려고 합니다.


4. 다음 포스팅

다음 포스팅에서는 OWASP의 File Upload Cheat Sheet를 통해 파일 업로드 과정에서 발생할 수 있는 대표적인 보안 위협과 대응 방법을 살펴보고, 안전한 파일 업로드 기능을 구현하기 위해 필요한 보안 요구사항을 정리해 보겠습니다.