我能否可靠地找出正确的 mime 类型来提供不受信任的内容?

Posted

技术标签:

【中文标题】我能否可靠地找出正确的 mime 类型来提供不受信任的内容?【英文标题】:Can I reliably figure out the correct mime type to serve untrusted content? 【发布时间】:2011-04-29 10:58:04 【问题描述】:

假设我让用户将文件上传到我的服务器,我让用户下载它们。我想将 mime 类型设置为不仅仅是 application/octet-stream,这样如果浏览器可以打开它们,它就可以(例如,对于图像、pdf 文件、纯文本文件等)当然,由于文件是用户上传的,所以不能信任文件扩展名等

是否有一个很好的库来确定什么 mime 类型与任意 blob 一起使用?最好从 Python 中使用 :-)

谢谢!

【问题讨论】:

【参考方案1】:

试试python-magic。

【讨论】:

【参考方案2】:

当心文本文件:无法知道它们的编码是什么,也没有可靠的猜测方法,特别是因为在 Windows 中创建的大多数文件都是 8 位 MBCS 编码,如果没有语言启发式,这些编码是无法区分的。您需要知道编码——而不仅仅是 MIME 类型——才能设置完整的 Content-Type 以在浏览器中查看文件。如果您想允许上传和显示文本,使用 html 文本表单比上传原始文件更安全。

另外,请注意一个文件可以是多种文件类型;例如,自解压 ZIP 既是有效的 Windows 可执行文件,又是 ZIP 文件,可以视为两者之一。

【讨论】:

以上是关于我能否可靠地找出正确的 mime 类型来提供不受信任的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Django 正确地为我的 React 生产构建提供服务。当前配置存在 MIME 类型问题

使用正确的 MIME 类型提供 XHTML

​tomcat7.0配置ssl受信证书,手机打开不受信

JDK 解决证书不受信异常

PHP处理上传文件信息数组中的文件类型 正确获取

该脚本具有不受支持的 MIME 类型 ('text/html')