Безопасность вокруг загруженных пользователем файлов - PullRequest
1 голос
/ 06 декабря 2011

У меня есть клиентский веб-сайт на python, который запускает функцию, похожую на dropbox, которая позволяет загружать файлы.

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

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

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

  1. Необходимо ли в целях безопасности ограничивать какие форматы файлов можно загружать?
  2. Если да, то как, если не используется что-то вроде libmagic, можно ли наилучшим образом определить формат файла?
  3. Существуют ли другие меры, которые мне необходимо предпринять для обеспечения безопасности при разрешении публично загружаемых файлов?

Спасибо.

1 Ответ

0 голосов
/ 06 декабря 2011

Упомянутый вопрос об ошибке (который связывает this ) не относится к ошибке, он говорит, что некоторые типы файлов MS Office, как, например, jar-файлы Java, упакованы и сжаты как zip-файлы.Если вы переименуете файл .xlsx в .zip, вы сможете просмотреть его содержимое - я нашел 13 .xml файлов и файл настроек принтера .bin в простом примере.

В целях безопасности вы не можете «доверять»MIME-тип и расширение файла, предоставляемые пользователем, но в принципе вы можете использовать их для проверки того, что содержимое действительно для заявленного типа файла.Первый уровень проверки будет гарантировать, что заявленные файлы Office на самом деле являются действительными zip-файлами, второй - проверку соответствия содержимого тому, что ожидает приложение Office.Не будучи разработчиком Office, я не знаю, как проверить zip-архив, определить, для какого приложения Office оно предназначено, и проверить, может ли приложение его открывать, но я уверен, что оно существует где-то в MSDN.

Что более важно, что вы подразумеваете под "безопасность важна для моего приложения"?Безопасность предотвращает нежелательные события - вам нужно определить, что вы хотите предотвратить.Вы хотите, чтобы пользователи могли загружать файлы только для приложений из белого списка?Должны ли они быть защищены от загрузки типов файлов из черного списка (например, .exe)?С тобой все в порядке, если пользователь загрузил 10 МБ случайных битов и назвал их файлом .xyz?

...