我正在处理使用express.js和节点上传文件,并具备基本功能的工作。 我需要的是实现一些安全措施 - 也就是,限制上传到特定格式(PNG,JPEG)。 有没有一种简单的方法,只允许特定的格式? 难道在体内解析器去?
app.use(express.bodyParser({
uploadDir: __dirname + '/public/uploads',
keepExtensions: true }));
app.use(express.limit('4mb'));
有没有我应该考虑任何其他的安全措施? 它是通常一个好主意,从图像擦EXIF数据?
谢谢,
Ben
根据该对连接的文档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});
警告:我没有测试过任何这一点。
我发现了一个潜在的解决方案:
在您的中间件,
if (req.files[key].type != 'image/png' && req.files[key].type != 'image/jpeg'){
res.send(403);
} else {
next();
}
更新:这不会真正停止从上传文件,但。