如果有人在节点 js 应用程序中通过 multer 将扩展名从 exe 更改为 png,则不应允许文件上传
Should not allow file upload if anyone changes extension from exe to png via multer in node js application
我在我的 nodejs (express js) 应用程序中使用 multer
上传文件,它工作正常。我在那里进行了 mime 类型检查,也只允许 png 文件,但是如果我将上传文件的扩展名从 abc.exe
更改为 abc.png
,它也会被上传,这是错误的。
这是我的代码。
var multer = require('multer');
var imagefolder = __base + 'public/complaintimages/';
var diskstorage = multer.diskStorage({
destination: function (req, file, cb) {
if (common.ImageMimeTypes.indexOf(file.mimetype) < 0) {
common.ActionOutput.Status = common.ActionStatus.WrongFileUploaded;
common.ActionOutput.Message = 'Invalid image file: ' + file.originalname;
cb(new Error('FileUpload:' + common.ActionStatus.WrongFileUploaded), null);
} else
cb(null, imagefolder);
},
filename: function (req, file, cb) {
var filenm = randomstring.generate(10);
//console.log(filenm + file.originalname);
cb(null, filenm + file.originalname);
}
});
var upload = multer({
storage: diskstorage
});
它应该检查文件内容的 mime 类型。将其他重命名为 png 不应上传。这似乎是库中的错误。
请指教
在你的路由处理程序中,当你有保存的文件名时,你可以使用 mmmagic
模块:
var mmm = require('mmmagic'),
var magic = new mmm.Magic(mmm.MAGIC_MIME_TYPE);
magic.detectFile(fileName, function (err, mime) {
if (err) {
// handle error
} else {
// check the mime
// and remove the file if you don't like it
// plus send a correct response to the client
}
});
更新
如果 mmmagic
对您不起作用,那么您可以使用 file-type
模块,但它适用于缓冲区,因此您首先必须将文件(或其中的一部分)读入缓冲区并使用 file-type
检查 mime 类型。 read-chunk
模块可以方便地读取部分文件。
参见:
我在我的 nodejs (express js) 应用程序中使用 multer
上传文件,它工作正常。我在那里进行了 mime 类型检查,也只允许 png 文件,但是如果我将上传文件的扩展名从 abc.exe
更改为 abc.png
,它也会被上传,这是错误的。
这是我的代码。
var multer = require('multer');
var imagefolder = __base + 'public/complaintimages/';
var diskstorage = multer.diskStorage({
destination: function (req, file, cb) {
if (common.ImageMimeTypes.indexOf(file.mimetype) < 0) {
common.ActionOutput.Status = common.ActionStatus.WrongFileUploaded;
common.ActionOutput.Message = 'Invalid image file: ' + file.originalname;
cb(new Error('FileUpload:' + common.ActionStatus.WrongFileUploaded), null);
} else
cb(null, imagefolder);
},
filename: function (req, file, cb) {
var filenm = randomstring.generate(10);
//console.log(filenm + file.originalname);
cb(null, filenm + file.originalname);
}
});
var upload = multer({
storage: diskstorage
});
它应该检查文件内容的 mime 类型。将其他重命名为 png 不应上传。这似乎是库中的错误。 请指教
在你的路由处理程序中,当你有保存的文件名时,你可以使用 mmmagic
模块:
var mmm = require('mmmagic'),
var magic = new mmm.Magic(mmm.MAGIC_MIME_TYPE);
magic.detectFile(fileName, function (err, mime) {
if (err) {
// handle error
} else {
// check the mime
// and remove the file if you don't like it
// plus send a correct response to the client
}
});
更新
如果 mmmagic
对您不起作用,那么您可以使用 file-type
模块,但它适用于缓冲区,因此您首先必须将文件(或其中的一部分)读入缓冲区并使用 file-type
检查 mime 类型。 read-chunk
模块可以方便地读取部分文件。
参见: