【发布时间】:2013-07-16 04:13:09
【问题描述】:
我们必须为 node.js 项目实现一个图片上传器。作为我们使用 express.js 的框架,我们按照此处描述的方式进行操作:http://howtonode.org/really-simple-file-uploads
但我们不确定如何保护此图片上传器。到目前为止,我们所做的是:
- 检查文件大小
- 检查扩展和标题
- 重命名文件
- 文件只能通过特殊路径访问,并且不在根文件夹中
这就够了吗?我们对下面这行不太满意:
// CHECKING FOR FILESIZE, EXTENSION, HEADERS
fs.readFile(req.files.displayImage.path, function (err, data) {
...
...
...
// RENAMING FILE
// SAVE FILE
...
...
...
}
这样读图省事吗?我们担心,req.files.displayImage.path 中可能存在恶意代码。我们是否需要添加更多检查或我们的检查是否足够?如果我们使用所描述的代码,我们会为攻击者提供哪些攻击向量?
感谢您的建议 乔尔茨基
【问题讨论】:
-
将字节读入
Buffer不能执行恶意代码。 -
感谢您的回答。但是我们将文件读入缓冲区,然后将其保存到磁盘。那么如果我们将带有恶意代码的图像保存到磁盘会出现什么问题呢?
-
将字节写入磁盘无法执行恶意代码。当您尝试解释字节并出现错误时,就会发生安全漏洞。
-
也感谢您的建议。就我们看到的问题而言,我们的服务器没有很大的安全隐患,因为我们不对图像的字节做任何事情。但是获取图像的用户是否存在安全风险?因为我们将图像交付给多个用户,而我们的服务器不会成为恶意代码的分发者!我们在某处读到,重新处理图像是个好主意,但我们不知道这是如何删除恶意代码的。
-
好的,那么您可以选择在我们的服务器上打开一个可能的漏洞利用或向用户提供恶意代码。大玩家如何处理这样的事情会很有趣。那么是否可以通过例如分发带有恶意代码的图像? Facebook 还是 Tumblr?出现了一个问题:“对于两个人的项目来说,将安全风险转移给用户而不在服务器上处理图像是否更好?”
标签: node.js security file-upload sanitization