[python] 취약한 파일 업로드 방지

웹 애플리케이션에서 파일 업로드 기능을 구현할 때 보안에 주의해야 합니다. 파일 업로드 기능은 공격자가 악성 파일을 업로드하고 실행할 수 있는 취약점이 될 수 있습니다. 여기에는 몇 가지 중요한 보안 기법이 필요합니다.

파일 업로드 취약성

파일 업로드 취약성은 악성 코드를 업로드하여 서버를 공격할 수 있는 가능성이 있는 취약점입니다. 일반적으로 파일 업로드에 대한 검사 및 제한이 부족하거나 악성 파일을 업로드하는 데 사용할 수 있는 응용 프로그램의 취약성이 존재할 수 있습니다.

취약점 방지를 위한 조치

1. 파일 확장자 및 MIME 유형 검사

악성 파일 업로드를 방지하기 위해 업로드된 파일의 확장자 및 MIME 유형을 검사해야 합니다.

import os
import magic

ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

def allowed_mime_type(file):
    mime = magic.Magic(mime=True)
    mimetype = mime.from_file(file)
    return mimetype in ['text/plain', 'application/pdf', 'image/png', 'image/jpeg', 'image/gif']

2. 파일 크기 제한

큰 파일을 업로드하여 서버 리소스를 소비하거나 공격을 시도하는 것을 방지하기 위해 파일의 크기를 제한해야 합니다.

app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024  # 16MB

3. 업로드된 파일 저장 위치

서버에서 업로드된 파일을 저장할 때 웹 루트 경로 외부에 저장하여 실행 가능한 파일의 업로드를 방지합니다.

결론

파일 업로드 보안은 웹 애플리케이션 보안에 중요한 부분입니다. 악성 파일 업로드를 방지하기 위해 파일의 확장자 및 MIME 유형을 검사하고 파일 크기를 제한하는 등의 조치가 필요합니다. 파일 업로드 기능을 구현할 때 이러한 보안 최적화를 고려해야 합니다.

참고 자료