BL4CK R4BBIT20 марта 2021 г. 14:11
Проверка загружаемого файла
Вопрос необходима проверка на формат и тип загружаемого файла. На форумах предлагают использовать FileExtensionValidator
как пример:
from django.core.validators import FileExtensionValidator class Post(models.Model): pdf_file = models.FileField(null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])
Вопрос на сколько это безопасно. Можно же переименовать расширение у любого файла
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
l
- laei
- 23 апреля 2024 г. 6:19
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:10баллов,
- Очки рейтинга-10
Последние комментарии
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко4 февраля 2024 г. 22:50
EVA25 декабря 2023 г. 7:30
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
DA
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
Dr Gangil Academics20 апреля 2024 г. 4:45
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев13 апреля 2024 г. 23:35
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
это не безопасно в любом случае, так что всеравно, какой вариант используется.
я не видел ни одного валидатора, который бы смотрел код бинарника, чтобы проверять, что пришло внутри
привет
по поводу вашего вопроса
если вам необходимо работать с различными форматами файлов, можно посмотреть на python-magic
https://pypi.org/project/python-magic/
кроме данной библиотеки попробуйте еше эти 2:
imghdr - https://docs.python.org/3/library/imghdr.html
fleep - https://github.com/floyernick/fleep-py
кстати, я бы еще посоветовал быть очень осторожным с этим - если файл обрабатывается django-й, пока поток джанги обрабатывает файл, он блокируется.
поэтому, если, условно, если у вас джанга работает в 6 потоков на gunicorn и 6 пользователей грузят файлы (условные 2 Gb каждый), сервис становится недоступен для 7-го
ну и по памяти можно прилечь - если у вас всего 10Gb памяти, а 6 пользователей одновременно грузит по файлу 2Gb - ничем хорошим это не кончится. файл является inMemory объектом
в принципе, справедливое ремарка
Но как идея для обхода данных ограничений можно написать отдельный сервис на питоне (отдельно от джанги) который делает только проверку/сохранение файла для модели основного приложения
более того можно смотреть в сторону асинхронности
короче по мне надо пробовать
ну даже асинхронность здесь может не спасти, поскольку тогда ляжет nginx, пока будет держать файл в очереди.
достаточно красивое решение - грузить фронтом картинку куда-нибудь на s3, а на бэк передавать url (понятно, что здесь никакой проверки не может быть), но с точки зрения нагрузки - все хорошо (+ безопасность можно обеспечить через presigned url, когда для каждого загружаемого файла сначала получается одноразовая ссылка для загрузки с ограничением по размеру). либо, использовать генераторы (тут как минимум по памяти можно не лечь). тоесть, усложно говоря, не ждать весь файл, а получать его кусками. приэтом, если в первом куске определяется не тот тип - сразу прерывать загрузку файла.
хотя, я работал только со скачиванием через генераторы (вполне успешно). получалось качать несколько 6+ гиговых файлов в несколько потоков на машине с 8 Гб памяти и все не умерло=)
мне кажется, есть смысл посмотреть какие-то js-ные либы для этого
js-ные либы - это означает что весь груз положить на плечи фронта?
конечно. а почему бы и нет?
клиентов много, бэк один=)
Это все супер. Но в моем варианте нужна была просто защита от дурака. Чтобы админ(в моем случаи председатель СНТ) не запихал протокол собрания в формате какого нить ворда или жпега. Сомневаюсь что он да и ограничение по размеру стоит на 10 мб
я думаю, если у вас нет задачи защищаться прям в круг, достаточно проверять расширение файла и не париться