gpt4 book ai didi

node.js - 如果有人在 Node js 应用程序中通过 multer 将扩展名从 exe 更改为 png,则不应允许文件上传

转载 作者:搜寻专家 更新时间:2023-10-31 23:51:59 24 4
gpt4 key购买 nike

我在我的 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 模块可以方便地读取部分文件。

参见:

关于node.js - 如果有人在 Node js 应用程序中通过 multer 将扩展名从 exe 更改为 png,则不应允许文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com