在节点中有很多关于文件上传的文章,教程和问题,但主要是针对初学者,并且他们中没有一个完全解释了如何保护生产文件上传。 我已经很努力地找到一个完整的答案,如何做到这一点,但它没有成功。如何使用Express在Node中安全地上传文件?
下面是我的发现的解释。在上传
限制文件大小:
app.use(express.limit('4mb'));
限制文件上传到只有特定的路线: 我不能让这种实际工作,但这里是我曾尝试:
替换:
app.use(express.bodyParser());
与
app.use(express.json()); app.use(express.urlencoded());
和多中间件添加到每个上传路线:
app.post('/upload', express.multipart(), uploadController.uploadPhoto);
这部分不工作,但如果我离开
express.bodyParser()
上传工作正常。那么我做错了什么?检查上传的文件类型上传保存到磁盘之前:
我想不出这部分,但是一个建议是,编写使用强大的解析文件上传自定义的中间件,并试图调整文件之前它被保存(假设它是一个图像)使用图像魔法库。建议这样做会使图像安全并确保它实际上是一个图像(因为如果图像不是图像,该过程会失败)。
这只适用于图像,所以它不是一个完整的解决方案。
我该如何执行此操作?任何示例代码?
还有什么我缺少的上传是安全的吗?
3将要走的路,假设2不工作。如果是这样,那将是理想的解决方案。 –
从我读的2应该工作,我做错了什么?你也有任何如何做3的例子吗?我试图做到这一点,但没有成功。我发现的大部分代码都无法与新版本的快递 –
一起使用请问您可以使用2创建最小的项目,并可能在github上共享代码。我会看看它。如果它不起作用,我会为你建立3并分享。 –