使用Pages/Keynote制作的docx/pptx的mime类型不正确


Incorrect mimetypes of a docx/pptx made with Pages/Keynote

我有一个Symfony 2.7项目。

最近我抱怨客户不能再上传.pptx.docx文件了

经过一番研究,我发现这是为了防止不需要的文件上传而检查的mime类型。

由powerpoint和Word制作的.pptx.docx文件被正确上传并具有正确的mime类型(application/vnd.ms-powerpointapplication/msword),但在Pages和Keynote中创建的文件然后导出到.docx/.pptx具有application/octet-streamapplication/zip的mime类型(取决于Symfony的MimeTypeGuesser使用)。默认情况下使用FileinfoMimeTypeGuesser,它内部调用finfo返回application/octet-stream。第二个猜测者,FileBinaryMimeTypeGuesser,返回application/zip(我相信有人使用file --mime)。

当我在这些文件上运行file --mime时(在我的Vagrant上是CentOS 7和我的Mac上),我得到这些结果:

的流浪汉:

[vagrant@localhost ~]$ file --mime keynote_pptx_test.pptx
keynote_pptx_test.pptx: application/zip; charset=binary
[vagrant@localhost ~]$ file --mime powerpoint_pptx_test.pptx
powerpoint_pptx_test.pptx: application/vnd.ms-powerpoint; charset=binary
本地:

user@MacBook-Pro $ file --mime keynote_pptx_test.pptx
keynote_pptx_test.pptx: application/zip; charset=binary
user@MacBook-Pro $ file --mime powerpoint_pptx_test.pptx
powerpoint_pptx_test.pptx: application/zip; charset=binary

显然,出于安全原因,我不想启用application/zip上传。

默认的mime类型猜测器(FileinfoMimeTypeGuesser)返回application/octet-stream。我不确定是否我想启用mimetype上传,也是出于安全原因。

我能做些什么来让这些上传发生,比如检查mimetype不同(也许Symfony中有更多的猜测者?),或者我应该启用application/octet-stream(如果是这样,安全影响是什么),或者只是苹果的软件需要改进?

Carlos Granados的评论就是答案:

顾名思义,MimeTypeGuesser只是"猜测"MimeType。从我的经验来看,找到合适的哑剧类型真的很难对于来自许多不同来源的文件,因此您将需要结束打开你接受的类型的范围。如果你担心关于安全性,您总是可以对这些文件应用更多的测试,例如示例:使用docx解析器验证它是一个真正的docx文件