我能否可靠地找出正确的 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 类型来提供不受信任的内容?的主要内容,如果未能解决你的问题,请参考以下文章