我有一个Symfony 2.7项目。
最近,我抱怨客户无法再上传.pptx
或.docx
个文件。
经过一番研究后,我发现这是我要检查的mimetype,以防止上传不需要的文件。
Power Point和Word制作的 .pptx
和.docx
文件已正确上传并具有正确的mimetype(application/vnd.ms-powerpoint
和application/msword
),但是在Pages中创建的文件和Keynote然后导出到.docx
/ .pptx
的mimetype为application/octet-stream
或application/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的软件需要改进吗?
答案 0 :(得分:0)
来自Carlos Granados的评论是答案:
作为名称实现,MimeTypeGuesser只是“猜测”MimeType。 根据我的经验,很难获得正确的哑剧类型 对于来自许多不同来源的文件,您需要结束 打开您接受的类型范围。如果你担心的话 关于安全性,您可以随时对这些文件应用更多测试 示例使用docx解析器来验证它是否是真正的docx文件