Назад | Перейти на главную страницу

У наших веб-разработчиков есть проект, требующий принятия загрузки файлов. Что я должен гарантировать?

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

Какие (общие) вещи нам необходимо принять во внимание, проверить, гарантировать или рассчитать, когда мы реализуем этот проект?

Вам нужно обратить внимание на:

  • Максимальный размер файла. Во многих случаях это могут сделать веб-разработчики.
  • Разрешения. Вы хотите, чтобы у каждого пользователя была своя (виртуальная или реальная) папка, которую никто не видел?
  • Вы хотите, чтобы пользователи могли удалять файлы, которые они загрузили, или даже видеть их? Вероятно, они должны иметь возможность проверить, какие файлы они загрузили, по крайней мере.
  • Вы хотите, чтобы пользователи могли не только загружать файлы, но и скачивать их? Это может быть сложно реализовать в зависимости от вашей настройки.
  • Убедитесь, что папка загрузки не позволяет им подниматься по дереву каталогов.
  • Будете ли вы ограничивать файлы по расширению или другим критериям? Вы должны быть уверены, что случайно не настроили «варез-сервер». Я знаю, что это для вошедших в систему пользователей, но любая безопасность может быть каким-то образом нарушена.

Это все, на что я могу сейчас обратить внимание.

  • Максимальный размер файла на клиенте с MAX_FILE_SIZE (если вы загружаете через HTTP) и на этапе обработки сервера.

  • Подумайте о том, чтобы хранить загруженные данные в отдельном разделе (обычно дамп веб-серверов /var/tmp), чтобы кто-то не завалил чем-то важным. Вы можете подумать о паранойе монтирования этого раздела с помощью -o noexec.

  • Что загруженное изображение / видео действительно является действительными данными. Кто-то может переименовать двоичный файл в funtimes.jpgили добавьте файл RAR в конец изображения. Проблемы стеганографии могут не быть в верхней части списка для наблюдения, но многие службы позволяют пользователям отмывать данные через них.

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

Вот несколько проблем, которые я припоминаю, когда делал это в прошлом:

  • Использование памяти; убедитесь, что ваш процесс записывает загрузку на диск, а не в память. Для ASP.NET это потребует написания собственного обработчика HTTP.
  • Ограничение содержимого; ваш веб-сервер и любые вышестоящие прокси-серверы или анализаторы контента должны будут поддерживать увеличенную длину контента.
  • Таймауты; сценарии, порты брандмауэра и прокси должны быть настроены на длительные периоды ожидания, так как загрузка может занять много времени.

Одна важная вещь, на которую следует обратить внимание, - это максимальный размер файла, который вы хотите разрешить. Убедитесь, что ваш сервер настроен на загрузку файлов, размер которых соответствует вашим требованиям.

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

Мой краткий список того, о чем вам следует подумать:

1- Приложение, протоколы (ftp, безопасный ftp, http, webdav и т. Д.) И конфигурация

Как файлы будут загружены? Есть ли интерфейсное приложение, которое будет им управлять? Какой ftp-сервер вы будете использовать? Здесь нет правильного ответа, вы просто хотите выяснить это заранее, чтобы убедиться, что остальные элементы выполнены правильно.

2- аутентификация и управление пользователями

Вам нужно решить, как будут работать учетные данные и аутентификация. Не разрешайте анонимную загрузку! Будут ли обычные пользователи или именованные пользователи? Кто будет управлять пользователями? Будут ли они управляться через приложение, через ОС или как-то иначе? Им разрешат удалить? Только их файлы или еще кто-нибудь?

3- расположение файлов и дисковое пространство

Вам нужно место для размещения файлов. Будет ли это постоянное место, или будет процесс, чтобы «переместить» их в другое место? Будет ли у каждого пользователя отдельное место или будет только одно место? Будет ли максимальный размер файла? Вы хотите ограничить разрешенные типы файлов?

Вот лишь некоторые вещи, с которыми я столкнулся при написании файла загрузки файлов:

Убедитесь, что вы очищаете или фильтруете имена загруженных файлов. (избавьтесь от .., \ и / и, возможно, от множества других вещей в зависимости от вашей ОС)

Не думайте, что имена файлов имеют только одно «расширение». report.doc.pdf или Makefile

Если ожидается, что загрузка будет большой, вам, возможно, придется беспокоиться о людях с медленным подключением (помните, что многие люди используют DSL с относительно медленными скоростями восходящего канала). Они могут регулярно сталкиваться с отключениями или тайм-аутами. Некоторые старые веб-браузеры при загрузке больших файлов истекали по таймауту. Вам нужно найти способ справиться с этим или проверить, что загрузка завершилась успешно.

Загрузите файлы в "безопасное" место. В системе UNIX это в идеале означало бы диск с установленным параметром noexec и дисковой квотой в учетной записи, которая загружает данные, чтобы он не мог полностью заполнить диск.

Если вы храните файлы в системе с автоматической индексацией документов (большинство настольных ОС), исключите папку, в которой они хранятся, из этой индексации. Например, недавно в Windows были обнаружены уязвимости (индексирование плохого PDF-файла), и, вероятно, их будет больше в будущем.

Реализовать на сервере какое-то антивирусное / вредоносное ПО. Несмотря на то, что вы принимаете якобы «неисполняемые» типы файлов, все же существует вероятность наличия исполняемого кода в этих файлах, который использует уязвимости переполнения буфера.