Image 使用express.js和node上传文件,限制扩展名
我正在使用express.js和node处理文件上传,基本功能正常。我需要的是实施一些安全措施——即,将上传限制为某些格式(PNG、JPEG)。是否有一种简单的方法只允许某些格式?它会进入主体解析器吗Image 使用express.js和node上传文件,限制扩展名,image,node.js,file-upload,express,Image,Node.js,File Upload,Express,我正在使用express.js和node处理文件上传,基本功能正常。我需要的是实施一些安全措施——即,将上传限制为某些格式(PNG、JPEG)。是否有一种简单的方法只允许某些格式?它会进入主体解析器吗 app.use(express.bodyParser({ uploadDir: __dirname + '/public/uploads', keepExtensions: true })); app.use(express.limit('4mb')); 我还应该考虑其他安
app.use(express.bodyParser({
uploadDir: __dirname + '/public/uploads',
keepExtensions: true }));
app.use(express.limit('4mb'));
我还应该考虑其他安全措施吗?从图像中擦除EXIF数据通常是一个好主意吗
谢谢
Ben我找到了一个潜在的解决方案: 在您的中间件中
if (req.files[key].type != 'image/png' && req.files[key].type != 'image/jpeg'){
res.send(403);
} else {
next();
}
更新:但这实际上并没有阻止文件上传 根据,任何选项也会传递给执行实际表单解析的
根据,您可以传递自己的onPart
处理程序:
部分收入
如果您对直接访问多部分流感兴趣,可以覆盖此方法。这样做将禁用否则将发生的任何“字段”/“文件”事件处理,使您完全负责处理该处理
incomingForm.onPart = function(part) {
part.addListener('data', function() {
// ...
});
}
如果您想使用“强大”仅为您处理某些零件,您可以这样做:
incomingForm.onPart = function(part) {
if (!part.filename) {
// let formidable handle all non-file parts
incomingForm.handlePart(part);
}
}
综上所述,您应该能够做到以下几点:
function onPart(part) {
if(!part.filename || part.filename.match(/\.(jpg|jpeg|png)$/i)) {
this.handlePart(part);
}
}
app.use(express.bodyParser({onPart: onPart});
警告:我还没有测试过任何一个。这很好,Linus,看起来很有效。两个问题:(1)比较内容类型和文件名是否更好?(2) 我应该如何处理不支持的格式?还有一个{res.send(403)}吗?我不确定
部分中有什么可用的内容,但是如果您有内容类型,我会与它进行比较。关于您将如何处理else
案例,我不确定您有什么选择。你真的无法访问那里的res
,我也不知道这是如何处理的。在我上面的例子中,我认为它只会忽略文件。哦,对于那些没有文件名的情况,您可能也应该执行this.handlePart(part)
,我已经更新了答案。很高兴知道。当文件与扩展名不匹配时,它似乎会忽略该文件。但是,如果能将这一点告知我的应用程序的其他部分,并发送相应的响应,那就太好了。