有很多关于 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()
。那么我做错了什么?在将上传保存到磁盘之前检查上传的文件类型:
我无法弄清楚这部分,但一个建议是编写一个自定义中间件,该中间件使用强大的解析文件上传并尝试在保存文件之前调整文件大小(假设它是一个图像),使用像图像魔术这样的库。建议是这样可以使图像安全并确保它实际上是图像(因为如果不是图像,该过程将失败)。
但这仅适用于图像,因此它不是一个完整的解决方案。
我该如何实施?任何示例代码?
为了确保上传安全,我还有什么遗漏吗?