Защита загрузки файлов
Проверка типа, размера и хранения загружаемых файлов предотвращает выполнение вредоносного кода.
Сигнатура
Secure file uploadНебезопасная загрузка файлов позволяет атакующему залить исполняемый скрипт (например shell.php) и выполнить его на сервере, либо перегрузить хранилище. Доверять расширению или заявленному типу нельзя.
Как защититься: проверяйте тип по содержимому, а не по расширению; ограничивайте размер; храните файлы вне корня веб-сервера и отдавайте без выполнения; генерируйте новые имена; запускайте антивирус при необходимости.
ALLOWED = {"image/png", "image/jpeg"}
def save_upload(file):
if file.content_type not in ALLOWED:
raise ValueError("Недопустимый тип файла")
if file.size > 5 * 1024 * 1024:
raise ValueError("Файл слишком большой")
# Сохраняем со сгенерированным именем вне веб-корня
save(file, name=new_random_name())