在PHP上传时,我正在尝试验证正在上传的文件的MIME类型,以匹配应用程序的一组有效MIME类型。尝试使用fileinfo()来确定Office 2007文件的MIME类型时,它不会检测为适当的MIME类型。相反,MIME类型响应是“application / zip”
Office文档MIME类型: http://filext.com/faq/office_mime_types.php
示例PHP代码:
$ oFileInfo = new finfo(FILEINFO_MIME_TYPE);
$ sMimeType = $ oFileInfo - > file($ _FILES ['Filedata'] ['tmp_name']);
echo $ sMimeType;
服务器设置信息:
我发现很多帖子都是从网络服务器下载时引用较新Office格式的问题。在所有这些示例中,我没有找到任何说明将新MIME类型添加到现有magic.mime文件的庄园,或者已经包含Microsoft Office 2007+ MIME类型的magic.mime文件的链接。谢谢你的帮助。
答案 0 :(得分:1)
较新的Office文件实际上是ZIP存档。这就是MIME Magic数据库将它们检测为ZIP文件的原因。您可能需要根据文件扩展名添加特殊规则,或查看ZIP文件以查看它是否具有docProps
文件夹(Office ZIP存档具有包含有关文档的元数据的文件夹)。
其他文件格式实际上是具有不同扩展名的ZIP存档,例如JAR文件。
答案 1 :(得分:1)
大声笑,是的,只是更新它,问题解决了。 不幸的是,看起来神奇的mime类型系统看起来像查看实际的文件内容,并且因为文件被压缩,它无法解压缩(并查看哪个文件?) 有人建议编写一个函数来解压缩压缩文件,然后检查是否存在“DocProps”目录。但这会向生产服务器引入另一种攻击方式。
- 是的,你应该更新magic.mime。
醇>
答案 2 :(得分:0)
magic.mime
。$_FILES['Filedata']['type']
) 注意: finfo()通过它的魔术字节确定文件的MIME类型;鉴于Office 2007文件(以及许多其他文件格式,例如ePUB)只是具有指定目录结构的zip包,因此让finfo()
返回application/zip
是合理的。
我建议解压缩或列出内容以检查其结构,如果你真的想根据它的内容确定文件类型(而不是上传时MIME类型浏览器报告)
答案 3 :(得分:0)
您是否尝试将新的mime类型添加到IIS?