使用Pages / Keynote制作的docx / pptx的mimetypes不正确

时间:2015-10-21 08:55:19

标签: php symfony powerpoint mime-types docx

我有一个Symfony 2.7项目。

最近,我抱怨客户无法再上传.pptx.docx个文件。

经过一番研究后,我发现这是我要检查的mimetype,以防止上传不需要的文件。

Power Point和Word制作的

.pptx.docx文件已正确上传并具有正确的mimetype(application/vnd.ms-powerpointapplication/msword),但是在Pages中创建的文件和Keynote然后导出到.docx / .pptx的mimetype为application/octet-streamapplication/zip(取决于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类型guesser(FileinfoMimeTypeGuesser)返回application/octet-stream。我还不确定是否要为上传启用该mimetype,这也是出于安全原因。

我可以做些什么来使这些上传发生,例如检查mimetype的方式不同(也许Symfony中有更多的猜测?),或者我应该启用application/octet-stream(如果是这样,有什么安全隐患) ,或者只是Apple的软件需要改进吗?

1 个答案:

答案 0 :(得分:0)

来自Carlos Granados的评论是答案:

  

作为名称实现,MimeTypeGuesser只是“猜测”MimeType。   根据我的经验,很难获得正确的哑剧类型   对于来自许多不同来源的文件,您需要结束   打开您接受的类型范围。如果你担心的话   关于安全性,您可以随时对这些文件应用更多测试   示例使用docx解析器来验证它是否是真正的docx文件