Есть много статей, руководств и вопросов о загрузке файлов в node, но в основном они предназначены для начинающих, и ни одна из них полностью не объясняет, как защитить загрузку файлов для производства. Я очень старался найти полный ответ о том, как это сделать, но безуспешно.
Ниже приводится объяснение моих выводов.
Ограничить размер файла при загрузке:
app.use(express.limit('4mb'));
Ограничьте загрузку файлов только определенными маршрутами: я не могу заставить это работать, но вот что я пробовал:
Заменять:
app.use(express.bodyParser());
с
app.use(express.json()); app.use(express.urlencoded());
и добавьте составное промежуточное ПО к каждому маршруту загрузки:
app.post('/upload', express.multipart(), uploadController.uploadPhoto);
Эта часть не работает, но загрузка работает нормально, если я оставлю
express.bodyParser()
. Так что я делаю неправильно?Проверка типа загружаемого файла перед сохранением загрузки на диск:
Я не мог понять эту часть, но было предложено написать собственное промежуточное программное обеспечение, которое использует грозный для анализа загрузки файлов и пытается изменить размер файла перед его сохранением (при условии, что это изображение) с использованием библиотеки, такой как магия изображений. Предполагалось, что это сделает изображение безопасным и гарантирует, что это действительно изображение (поскольку процесс завершится ошибкой, если это не изображение).
Однако это будет работать только с изображениями, поэтому это не полное решение.
Как я могу реализовать это? Любой пример кода?
Есть ли что-то еще, чего мне не хватает, чтобы загрузка была безопасной?