上传文件使用express.js和节点,限制扩展(uploading files using exp

2019-06-26 06:04发布

我正在处理使用express.js和节点上传文件,并具备基本功能的工作。 我需要的是实现一些安全措施 - 也就是,限制上传到特定格式(PNG,JPEG)。 有没有一种简单的方法,只允许特定的格式? 难道在体内解析器去?

app.use(express.bodyParser({
    uploadDir: __dirname + '/public/uploads',
    keepExtensions: true   }));

app.use(express.limit('4mb'));

有没有我应该考虑任何其他的安全措施? 它是通常一个好主意,从图像擦EXIF数据?

谢谢,

Ben

Answer 1:

根据该对连接的文档bodyParser ,任何选项也被送到强大 ,它不实际的形式解析。

据强大的文档 ,你可以通过你自己的onPart处理程序:

incomingForm.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});

警告:我没有测试过任何这一点。



Answer 2:

我发现了一个潜在的解决方案:

在您的中间件,

    if (req.files[key].type != 'image/png' && req.files[key].type != 'image/jpeg'){
      res.send(403);
    } else {
      next(); 
    }

更新:这不会真正停止从上传文件,但。



文章来源: uploading files using express.js and node, limiting extensions