允许应用程序/八位字节流类型的文件上传是否有安全隐患?

Ben*_*zek 5 security file-upload file-type

我有一个应用程序,用户可以上传文件供我们执行一些操作。唯一预期的文件类型是 JSON,最初我们将上传限制为 类型application/json

但是,我们有一位用户在尝试上传 JSON 文件时遇到错误。我们可以更新应用程序以允许文件类型application/octet-stream并使事情正常工作,但这在语义上似乎是这样。

我不太了解application/octet-stream。在我的搜索中,我没有了解到更多信息。似乎某些浏览器在不知道如何处理文件时可能会将文件转换为这种类型;有时,当文件扩展名不存在时,可能会引发此错误(我们已经对其进行了测试,但仍然遇到相同的问题);似乎这种类型允许.exe上传类型和其他任何类型的文件。

如果允许用户上传类型的文件是否存在安全风险application/octet-stream?为什么或者为什么不?

Ben*_*zek 3

发布我的问题后,它让我从不同的角度搜索我的问题。我想我的问题在这个帖子中得到了回答:

当用户上传自己的文件时会出现哪些安全问题?

鲍勃·阿曼写道:

如果您允许用户上传脚本和可执行文件,您应该确保通过该表单上传的任何内容都不会以应用程序/八位字节流以外的任何内容返回。当您处理潜在危险的上传时,请勿尝试混合内容类型。如果您要告诉用户他们必须担心自己的安全(这实际上就是您接受脚本或可执行文件时所做的事情),那么所有内容都应该作为应用程序/八位字节流提供,以便浏览器不会尝试渲染它。您可能还应该设置 Content-Disposition 标头。如果您想处理可执行文件,在管道中加入病毒扫描程序可能也是明智的。例如,ClamAV 是可编写脚本且开源的。