BL4CK R4BBIT
BL4CK R4BBITНаурыз 20, 2021, 2:11 Т.Қ.

Проверка загружаемого файла

Вопрос необходима проверка на формат и тип загружаемого файла. На форумах предлагают использовать FileExtensionValidator

как пример:

from django.core.validators import FileExtensionValidator
class Post(models.Model):
    pdf_file = models.FileField(null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])

Вопрос на сколько это безопасно. Можно же переименовать расширение у любого файла

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

10
Илья Чичак
  • Наурыз 20, 2021, 4:49 Т.Қ.

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

    Nomad
    • Наурыз 23, 2021, 3:55 Т.Ж.
    • (өңделген)

    привет

    по поводу вашего вопроса

    если вам необходимо работать с различными форматами файлов, можно посмотреть на python-magic

    https://pypi.org/project/python-magic/

    кроме данной библиотеки попробуйте еше эти 2:

    1. imghdr - https://docs.python.org/3/library/imghdr.html

    2. fleep - https://github.com/floyernick/fleep-py

      Илья Чичак
      • Наурыз 23, 2021, 4:26 Т.Ж.

      кстати, я бы еще посоветовал быть очень осторожным с этим - если файл обрабатывается django-й, пока поток джанги обрабатывает файл, он блокируется.

      поэтому, если, условно, если у вас джанга работает в 6 потоков на gunicorn и 6 пользователей грузят файлы (условные 2 Gb каждый), сервис становится недоступен для 7-го

      ну и по памяти можно прилечь - если у вас всего 10Gb памяти, а 6 пользователей одновременно грузит по файлу 2Gb - ничем хорошим это не кончится. файл является inMemory объектом

        Nomad
        • Наурыз 23, 2021, 9:25 Т.Ж.
        • (өңделген)

        в принципе, справедливое ремарка

        Но как идея для обхода данных ограничений можно написать отдельный сервис на питоне (отдельно от джанги) который делает только проверку/сохранение файла для модели основного приложения

        более того можно смотреть в сторону асинхронности

        короче по мне надо пробовать

          Илья Чичак
          • Наурыз 23, 2021, 11:35 Т.Ж.
          • (өңделген)

          ну даже асинхронность здесь может не спасти, поскольку тогда ляжет nginx, пока будет держать файл в очереди.

          достаточно красивое решение - грузить фронтом картинку куда-нибудь на s3, а на бэк передавать url (понятно, что здесь никакой проверки не может быть), но с точки зрения нагрузки - все хорошо (+ безопасность можно обеспечить через presigned url, когда для каждого загружаемого файла сначала получается одноразовая ссылка для загрузки с ограничением по размеру). либо, использовать генераторы (тут как минимум по памяти можно не лечь). тоесть, усложно говоря, не ждать весь файл, а получать его кусками. приэтом, если в первом куске определяется не тот тип - сразу прерывать загрузку файла.

          хотя, я работал только со скачиванием через генераторы (вполне успешно). получалось качать несколько 6+ гиговых файлов в несколько потоков на машине с 8 Гб памяти и все не умерло=)

            Илья Чичак
            • Наурыз 23, 2021, 11:37 Т.Ж.

            мне кажется, есть смысл посмотреть какие-то js-ные либы для этого

              Nomad
              • Наурыз 23, 2021, 2:19 Т.Қ.

              js-ные либы - это означает что весь груз положить на плечи фронта?

                Илья Чичак
                • Наурыз 23, 2021, 4:41 Т.Қ.

                конечно. а почему бы и нет?
                клиентов много, бэк один=)

                  BL4CK R4BBIT
                  • Наурыз 24, 2021, 12:56 Т.Ж.

                  Это все супер. Но в моем варианте нужна была просто защита от дурака. Чтобы админ(в моем случаи председатель СНТ) не запихал протокол собрания в формате какого нить ворда или жпега. Сомневаюсь что он да и ограничение по размеру стоит на 10 мб

                    Илья Чичак
                    • Наурыз 24, 2021, 4:47 Т.Ж.

                    я думаю, если у вас нет задачи защищаться прям в круг, достаточно проверять расширение файла и не париться

                      Пікірлер

                      Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                      Кіріңіз немесе Тіркеліңіз
                      AD

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Нәтиже:50ұпай,
                      • Бағалау ұпайлары-4
                      m
                      • molni99
                      • Қаз. 26, 2024, 8:37 Т.Ж.

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Нәтиже:80ұпай,
                      • Бағалау ұпайлары4
                      m
                      • molni99
                      • Қаз. 26, 2024, 8:29 Т.Ж.

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Нәтиже:20ұпай,
                      • Бағалау ұпайлары-10
                      Соңғы пікірлер
                      ИМ
                      Игорь МаксимовҚар. 22, 2024, 7:51 Т.Қ.
                      Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                      Evgenii Legotckoi
                      Evgenii LegotckoiҚаз. 31, 2024, 9:37 Т.Қ.
                      Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                      A
                      ALO1ZEҚаз. 19, 2024, 3:19 Т.Қ.
                      Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                      ИМ
                      Игорь МаксимовҚаз. 5, 2024, 2:51 Т.Қ.
                      Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                      d
                      dblas5Шілде 5, 2024, 6:02 Т.Қ.
                      QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                      Енді форумда талқылаңыз
                      m
                      moogoҚар. 22, 2024, 3:17 Т.Қ.
                      Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
                      Evgenii Legotckoi
                      Evgenii LegotckoiМаусым 24, 2024, 10:11 Т.Қ.
                      добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                      t
                      tonypeachey1Қар. 15, 2024, 2:04 Т.Қ.
                      google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                      NSProject
                      NSProjectМаусым 4, 2022, 10:49 Т.Ж.
                      Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

                      Бізді әлеуметтік желілерде бақылаңыз