Подтвердить загрузку файлов на основе их содержимого - PullRequest
0 голосов
/ 08 марта 2019

Я пытался проверить загрузку файла.Сначала я попытался проверить расширение.но если вредоносный файл со следующим расширением также будет проходить проверку.

def validate_file_extension(value):
    ext = os.path.splitext(value.name)[1]
    valid_extensions = ['.pdf', '.doc', '.docx', '.jpg', '.png', '.xlsx', '.xls', 'ppt']
    if not ext.lower() in valid_extensions:
        raise ValidationError(u'Unsupported file extension.')

Затем я попытался использовать магию Python, чтобы просмотреть файл и определить фактический тип.

def validate_file_type(value):
    file_type = magic.from_buffer(value.read(1024), mime=True)

    valid_file_types = ['image/png',
                        'image/jpg','text/plain',
                        'application/pdf',
                        'application/ms-excel',]
    if not file_type.lower() in valid_file_types:
        raise ValidationError(u'Unsupported file.')

Но файлы Excel, Word и ppt распознаются как «application / zip».Поэтому не может использовать этот подход для документов MS.Есть ли лучший способ проверить загрузку файлов?

1 Ответ

0 голосов
/ 08 марта 2019

Нашел решение здесь. https://pypi.org/project/django-constrainedfilefield/

Просто нужно использовать ConstrainedFileField вместо FileField. Это подтверждает, что даже расширение файла изменилось.

attach_file = ConstrainedFileField(
                                    null=True,
                                    blank=True,
                                    upload_to='directory_path',
                                    content_types=contents,
                                    max_upload_size=1024000
                                            )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...