Computer 공부/Backend question

첨부파일 기능의 경우 신경써야하는 것들..

살아가는 이유_EU 2024. 12. 7. 17:32
728x90
반응형

웹 애플리케이션에서 파일 업로드 기능을 구현할 때 보안과 성능 문제는 매우 중요합니다. 파일 업로드는 사용자 입력을 받아 서버에 저장하므로 잘못된 구현은 보안 위협과 성능 저하를 초래할 수 있습니다. 이를 해결하기 위한 접근법을 보안과 성능 측면에서 정리했습니다.


1. 보안 문제 및 방지 방법

1.1 파일 크기 제한

  • 문제점:
    • 대용량 파일 업로드로 인해 서버 메모리 및 디스크 공간이 고갈될 수 있음.
  • 해결 방법:
    • 업로드 가능한 파일 크기를 제한.
    • 예: 10MB 이하로 제한 (Content-Length 또는 백엔드 로직에서 체크).
    • Chunked Upload를 구현하여 대용량 파일을 작은 조각으로 나눠 업로드.

1.2 파일 형식 제한

  • 문제점:
    • 악성 코드가 포함된 파일이 업로드될 수 있음(예: .exe, .js, .php 등).
  • 해결 방법:
    • 허용되는 파일 형식을 화이트리스트로 지정(JPEG, PNG, PDF 등).
    • MIME 타입과 파일 확장자를 모두 검사.
    • 서드파티 라이브러리(예: file-type)를 활용해 파일 내용을 확인.

1.3 악성 스크립트 실행

  • 문제점:
    • 업로드된 파일이 실행 가능한 스크립트를 포함할 경우 서버에서 실행될 위험.
  • 해결 방법:
    • 업로드된 파일의 저장 위치를 웹 서버의 루트 디렉토리 밖으로 설정.
    • HTTP 헤더를 설정해 실행 가능성을 차단(Content-Disposition: attachment).
    • 파일 이름 난수화 처리(예: UUID 사용)로 경로 노출 방지.

1.4 바이러스 및 악성 코드

  • 문제점:
    • 바이러스가 포함된 파일이 서버에 저장되거나 다른 사용자가 다운로드할 위험.
  • 해결 방법:
    • 업로드된 파일을 바이러스 스캐너(예: ClamAV)로 검사.
    • 의심 파일은 별도 검증 절차를 거친 후 처리.

1.5 업로드 제한 우회

  • 문제점:
    • 사용자가 HTTP 요청을 조작해 서버에서 허용하지 않는 파일이나 크기를 우회.
  • 해결 방법:
    • 백엔드에서 크기, 형식 등 추가 검사를 반드시 수행.
    • 클라이언트 단에서의 검사는 보조 역할로 사용.

1.6 업로드 경로 탐지

  • 문제점:
    • 업로드된 파일의 URL이 노출되어 공격자가 악용할 수 있음.
  • 해결 방법:
    • 파일 이름을 난수화하거나 암호화.
    • URL 접근 권한 검사를 추가하여 인증된 사용자만 파일에 접근 가능.

1.7 업로드 요청의 DoS 공격

  • 문제점:
    • 다수의 파일 업로드 요청을 통해 서버 자원을 고갈시킬 수 있음.
  • 해결 방법:
    • 요청 속도 제한(레이트 리미터, 예: Nginx, Cloudflare).
    • 인증된 사용자만 업로드 가능하도록 제한.

2. 성능 문제 및 해결 방법

2.1 파일 크기

  • 문제점:
    • 대용량 파일 업로드로 인해 네트워크 대역폭과 저장 공간이 부족해질 수 있음.
  • 해결 방법:
    • 최대 업로드 크기를 제한(예: 10MB).
    • 파일을 압축해 업로드(이미지 리사이징, 동영상 인코딩).

2.2 파일 형식

  • 문제점:
    • 처리할 수 없는 파일 형식으로 인한 성능 저하(예: 이미지 분석 시 비지원 형식).
  • 해결 방법:
    • 처리 가능한 형식만 업로드 허용.
    • 업로드 후 서버에서 필요한 형식으로 변환(예: 이미지는 PNG/JPEG로 변환).

2.3 파일 저장소

  • 문제점:
    • 파일을 로컬 서버에 저장하면 서버 용량이 빠르게 소모.
  • 해결 방법:
    • 클라우드 스토리지 사용(AWS S3, Azure Blob Storage).
    • CDN(Content Delivery Network)을 사용해 업로드된 파일을 효율적으로 제공.

2.4 동시 업로드 처리

  • 문제점:
    • 여러 사용자가 동시에 파일을 업로드하면 서버의 I/O 병목이 발생.
  • 해결 방법:
    • 비동기 처리(Async/Await)와 큐 시스템(RabbitMQ, Kafka) 도입.
    • 서버 스케일 아웃(수평 확장)으로 트래픽 분산.

2.5 업로드 속도

  • 문제점:
    • 업로드 요청이 네트워크 병목을 일으켜 다른 사용자 요청에 영향을 미침.
  • 해결 방법:
    • 업로드 속도 제한 설정.
    • Chunked Upload로 파일을 조각내어 전송.
728x90
반응형