如果用户上传文件但通过将 mime-type 设置为任意值(如“superdangerous/blackhatstuff”)来修改请求,我以后将相同的 mime 类型发送回不同的用户是否安全?
即另一个用户下载相同的文件,我将 mimetype 设置为“superdangerous/blackhatstuff”,是否可以将 mime 类型设置为潜在危险的东西?因为它是用户提供的数据,我觉得在没有某种清理的情况下存储和重放不是一个好主意。(当然,我会在存储 mime 类型之前对查询进行清理,所以我不关心通过 mime 类型进行的 SQL 注入攻击。)
我正在使用 clam AV 扫描上传的文件,希望能捕捉到一些 mime 嗅探攻击,但这并不是我在这里真正要问的。
如果这实际上是危险的,那么正确的做法是什么?我应该根本不指定 mime 类型,让接收者猜测吗?我是否应该尝试做自己的 mime 嗅探(我在 Linux 上使用 PHP,它提供了一个用于文件魔术的 API。)
编辑:更多细节
让我解释一下这个功能的目的。有问题的应用程序用作需要提交各种工件以供审查和批准的工作流的一部分,包括(但不限于)word 文档、电子表格、图像和档案。其他用户需要能够下载这些工件才能查看它们并做出批准决定。
为防止出现一些明显的违规行为,我们设置了黑名单(例如上传 PHP 或 Javascript 文件),并且我们将 Content-Disposition 设置为“附件;文件名=...”。我们在上传的文件上运行 Clam AV 作为基本清理,因为我们不能真正对我们的用户强制执行白名单。该应用程序在 Intranet 上运行,需要在访问任何内容之前进行身份验证,并且我们的用户 [大部分] 受到信任。
无论如何,重点是我不是在询问存储文件和让用户下载这些文件的安全性。(我意识到这是一个很大的威胁向量,但这不是我要问的问题。)我真的更关心重播用户提供的 mime 类型是否安全,如果不是,还有什么替代方案?根本不指定 MIME 类型?