通过express js和bodyParser保护文件上传器

时间:2013-06-18 17:52:37

标签: node.js file-upload express security

我想了解如何在快递js中保护文件上传,最后我开发了以下代码来完成它。

app.use(express.json());
app.use(express.urlencoded());
app.post('/',express.bodyParser({ 
                              keepExtensions: true, 
                              uploadDir: __dirname + '/faxFiles',
                              limit: '20mb'
                            }),function(req,res){
                              checkFile(req.files.faxFile);   
                            });

如你所见,我可以限制文件大小并在bodyParser中设置uploadDir,现在我需要允许用户只上传图像和pdf,我使用的方式是checkFile函数,其中包含以下代码。

var fs = require('fs');
var checkFile = function(faxFile){
    if (faxFile.type != "image/jpeg" || faxFile.type != "application/pdf" || faxFile.type != "image/gif"){
        fs.unlink(faxFile.path, function(err){
        });
    } 
}

但我认为这不是最好的方法,有没有其他方法可以做到这一点?比如在bodyParser构造函数中设置文件扩展名?

3 个答案:

答案 0 :(得分:1)

Express使用formidible(https://github.com/felixge/node-formidable)来解析表单数据,包括文件上传。

我没有看到强大的选项来限制文件类型,所以我建议Express也可能没​​有。

答案 1 :(得分:1)

您可以使用mmmagic严格检查扩展程序。它是node.js的异步libmagic绑定,用于通过数据检查检测内容类型。

答案 2 :(得分:1)

我创建了一个小小的要点,以展示如何在流式传输文件时使用mmmagic检查mime类型:

https://gist.github.com/chmanie/8520572

这更有可能在multipartybusboy等流媒体环境中发挥作用。