Недавний проект требует, чтобы один из наших веб-сайтов принимал загрузки файлов от (вошедших в систему) пользователей (в основном изображений и, возможно, некоторых видео).
Какие (общие) вещи нам необходимо принять во внимание, проверить, гарантировать или рассчитать, когда мы реализуем этот проект?
Вам нужно обратить внимание на:
Это все, на что я могу сейчас обратить внимание.
Максимальный размер файла на клиенте с MAX_FILE_SIZE
(если вы загружаете через HTTP) и на этапе обработки сервера.
Подумайте о том, чтобы хранить загруженные данные в отдельном разделе (обычно дамп веб-серверов /var/tmp
), чтобы кто-то не завалил чем-то важным. Вы можете подумать о паранойе монтирования этого раздела с помощью -o noexec
.
Что загруженное изображение / видео действительно является действительными данными. Кто-то может переименовать двоичный файл в funtimes.jpg
или добавьте файл RAR в конец изображения. Проблемы стеганографии могут не быть в верхней части списка для наблюдения, но многие службы позволяют пользователям отмывать данные через них.
Считайте каждый загруженный файл ненадежным, пока вы не докажете обратное. Сканируйте их на вирусы, все работает.
Вот несколько проблем, которые я припоминаю, когда делал это в прошлом:
Одна важная вещь, на которую следует обратить внимание, - это максимальный размер файла, который вы хотите разрешить. Убедитесь, что ваш сервер настроен на загрузку файлов, размер которых соответствует вашим требованиям.
Как и я очень рекомендовать целевую папку для загрузки вне структуры корневой папки вашего приложения.
Мой краткий список того, о чем вам следует подумать:
1- Приложение, протоколы (ftp, безопасный ftp, http, webdav и т. Д.) И конфигурация
Как файлы будут загружены? Есть ли интерфейсное приложение, которое будет им управлять? Какой ftp-сервер вы будете использовать? Здесь нет правильного ответа, вы просто хотите выяснить это заранее, чтобы убедиться, что остальные элементы выполнены правильно.
2- аутентификация и управление пользователями
Вам нужно решить, как будут работать учетные данные и аутентификация. Не разрешайте анонимную загрузку! Будут ли обычные пользователи или именованные пользователи? Кто будет управлять пользователями? Будут ли они управляться через приложение, через ОС или как-то иначе? Им разрешат удалить? Только их файлы или еще кто-нибудь?
3- расположение файлов и дисковое пространство
Вам нужно место для размещения файлов. Будет ли это постоянное место, или будет процесс, чтобы «переместить» их в другое место? Будет ли у каждого пользователя отдельное место или будет только одно место? Будет ли максимальный размер файла? Вы хотите ограничить разрешенные типы файлов?
Вот лишь некоторые вещи, с которыми я столкнулся при написании файла загрузки файлов:
Убедитесь, что вы очищаете или фильтруете имена загруженных файлов. (избавьтесь от .., \ и / и, возможно, от множества других вещей в зависимости от вашей ОС)
Не думайте, что имена файлов имеют только одно «расширение». report.doc.pdf или Makefile
Если ожидается, что загрузка будет большой, вам, возможно, придется беспокоиться о людях с медленным подключением (помните, что многие люди используют DSL с относительно медленными скоростями восходящего канала). Они могут регулярно сталкиваться с отключениями или тайм-аутами. Некоторые старые веб-браузеры при загрузке больших файлов истекали по таймауту. Вам нужно найти способ справиться с этим или проверить, что загрузка завершилась успешно.
Загрузите файлы в "безопасное" место. В системе UNIX это в идеале означало бы диск с установленным параметром noexec и дисковой квотой в учетной записи, которая загружает данные, чтобы он не мог полностью заполнить диск.
Если вы храните файлы в системе с автоматической индексацией документов (большинство настольных ОС), исключите папку, в которой они хранятся, из этой индексации. Например, недавно в Windows были обнаружены уязвимости (индексирование плохого PDF-файла), и, вероятно, их будет больше в будущем.
Реализовать на сервере какое-то антивирусное / вредоносное ПО. Несмотря на то, что вы принимаете якобы «неисполняемые» типы файлов, все же существует вероятность наличия исполняемого кода в этих файлах, который использует уязвимости переполнения буфера.