如何检测除应用程序/八位字节流之外的 .docx 正确 MIME

Mos*_*afa 6 php upload mime-types

我有一个将文档上传到服务器并将它们插入到 Mysql 表中的网站。

在这个过程中,服务器(通过 PHP)检查文件的类型来决定是拒绝它还是保存它,我通过发布

$_FILES["文件"]["类型"]

并确保它等于:

应用程序/vnd.openxmlformats-officedocument.wordprocessingml.document

但是,在某些情况下,发布的文件类型似乎是:

应用程序/八位字节流

这是因为客户端没有在设备上安装 MS Word 吗?

如果是这样的话,是不是安全的验证application/octet-stream是允许的文件类型中的一种?鉴于根据我的理解,它是用于通用 MIME 的;这意味着.exe允许包括任何文件类型?(不言而喻这会导致什么问题)。

.docx即使没有安装 MS Word,是否还有其他方法来验证文件类型?或者这背后的原因是什么?我见过其他网站.docx甚至允许从没有安装此类的移动设备上传文件。

谢谢您的帮助。

小智 1

对于所有文件类型,您都必须通过幻数。MIME 类型可以被攻击者修改。

该代码必须读取接收到的文件的前 3、4 或 5 个字节,并与所需的幻数进行比较。