Django и SuspiciousFileOperation:Обнаружена попытка обхода пути

Я попадаю в странную ситуацию только при развертывании (debug == false): Моя модель выбрасывает исключение path traversal attempt. Я хочу создать каталог для каждого загруженного файла и сохранить файл в каталоге (some.zip), используемом в примере. В моей среде dev у меня нет проблем и все работает просто отлично.

models.py:

class Template(models.Model):
    def get_folder(self, filename):
        filename_PATH = Path(filename)
        template_dir = filename_PATH.stem
        return Path(settings.TEMPLATES_FOLDER).joinpath(template_dir, filename)

    name = models.CharField("template", max_length=32, unique=True)
    file = models.FileField("templatefile", upload_to=get_folder, null=True, max_length=260, storage=OverwriteStorage())
    

class OverwriteStorage(FileSystemStorage): #this is actually above
    def get_available_name(self, name, max_length=None):
        self.delete(name)
        return name

forms.py:

class TemplateAdminForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
        super().__init__(*args, **kwargs)

    class Meta:
        model = Template
        fields = ["name", "file", ]

    def clean(self):
        cleaned_data = super().clean()

        upFile = Path(str(cleaned_data["file"]))
        if upFile.suffix == ".zip":
            path = self.instance.get_folder(cleaned_data["name"])
            logging.error(f"{path}")
            unpack_zip(path) ## works! the directory is created/filled  
        else:
            raise forms.ValidationError("unknown file type ...")
        logging.error("DONE!") # I see this output 
        return cleaned_data  

## signal to see when the error might be happening:
@receiver(post_save, sender = Template)
def testing(sender, **kwargs):
    logging.error("we never get here")

settings.py:

TEMPLATES_FOLDER = PATH(MEDIA_ROOT).joinpath("TEMPLATES")

but:

ERROR:django.security.SuspiciousFileOperation:Detected path traversal attempt in '/opt/project/media_root/TEMPLATES/some/some' WARNING:django.request:Bad Request: /admin/appName/template/add/

Я получаю ту же ошибку на Django 3.2.6 при открытии файла с режимом "wb" по абсолютному имени пути, я не использую временный файл, который, как я прочитал, рекомендуется для того, чтобы избежать этой проблемы, поэтому я ссылаюсь на этот ответ в случае, если он поможет вам развернуть его.

Вот где это советуют: ответ

Статья на эту тему: ссылка

Вернуться на верх