如果有人通过节点js应用程序中的multer将扩展名从exe更改为png,则不应允许文件上载

我正在使用multer在我的nodejs(快速js)应用程序工作正常上传文件。 我已经把一个MIMEtypes检查那里也允许只有PNG文件,但如果我把上传的文件的abc.exeabc.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 }); 

它应该检查MIMEtypes的文件内容。 将其他重命名为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 file-typeread-chunk模块可以方便地读取文件的一部分。

看到: