Это предупреждение специально против добавления промежуточного программного обеспечения express.bodyparser во весь ваш стек, поскольку оно добавляет express.multipart ко всем конечным точкам POST, и поэтому загрузка файлов автоматически принимается на всех конечных точках POST. По умолчанию фреймворк автоматически сохраняет любые загруженные файлы в /tmp
, поэтому, если вы не очистите их, злоумышленник может заполнить ваш диск загруженными файлами.
Если вы хотите избежать использования дополнительных модулей, вам следует реализовать express.multipart на конечных точках, где вы хотите разрешить загрузку файлов. Вот о чем я говорю:
var express = require("express")
, app = express();
// middleware (no bodyparser here)
app.use(express.json());
app.use(express.urlencoded());
// average GET endpoint
app.get("/", function(req,res) {
res.send('ok');
});
// average POST endpont
app.post("/login", function(req,res) {
res.send('ok');
});
// File upload POST endpoint
app.post('/upload', express.multipart, function(req, res) {
//File upload logic here
//Make sure to delete or move the file accordingly here, otherwise files will pile up in `/tmp`
});
Обратите внимание на включение express.multipart в конечную точку загрузки файла. Эта конечная точка теперь будет обрабатывать многокомпонентные загрузки файлов, и если вы правильно их обработаете, они не будут представлять угрозы.
Теперь, сказав вам все это, Connect отказывается от использования multipart из-за именно этой проблемы, но, похоже, нет никаких планов по добавлению замены загрузки файлов на основе потока. Вместо этого они рекомендуют использовать node-multiparty, который использует потоки, чтобы никогда не размещать файл на диске. Тем не менее, похоже, я не могу найти никаких хороших ссылок на использование многопартийности в качестве промежуточного программного обеспечения без сохранения файлов, поэтому вам придется связаться с автором многопартийности или более внимательно изучить API для его реализации с помощью Express. .
person
Rob Riddle
schedule
10.02.2014