
BL4CK R4BBIT21 марта 2021 г. 0: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 хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ua
- Unknown akadamn
- 24 января 2025 г. 17:14
Qt - Тест 001. Сигналы и слоты
- Результат:84баллов,
- Очки рейтинга4
Ua
- Unknown akadamn
- 24 января 2025 г. 16:22
Qt - Тест 001. Сигналы и слоты
- Результат:42баллов,
- Очки рейтинга-8
Последние комментарии
ИМ
Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 ноября 2024 г. 21:51

Evgenii Legotckoi31 октября 2024 г. 23:37
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5 октября 2024 г. 16:51
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Сейчас обсуждают на форуме
f
Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
firstlunoxod15 февраля 2025 г. 13:46

Дмитрий3 февраля 2025 г. 16:24
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
это не безопасно в любом случае, так что всеравно, какой вариант используется.
я не видел ни одного валидатора, который бы смотрел код бинарника, чтобы проверять, что пришло внутри
привет
по поводу вашего вопроса
если вам необходимо работать с различными форматами файлов, можно посмотреть на 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 мб
я думаю, если у вас нет задачи защищаться прям в круг, достаточно проверять расширение файла и не париться