使用PHP确认文件类型与扩展名匹配(MS Word、Excel和PowerPoint存在问题)
在接受文件之前,我希望确认实际文件与文件扩展名匹配。为此,我采取以下措施:使用PHP确认文件类型与扩展名匹配(MS Word、Excel和PowerPoint存在问题),php,mime-types,Php,Mime Types,在接受文件之前,我希望确认实际文件与文件扩展名匹配。为此,我采取以下措施: $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime=finfo_file($finfo, $filename); $ext=getExtFromMime($mime); //Simple switch lookup table if($ext==pathinfo($filename, PATHINFO_EXTENSION)) {//File is okay} else {//fi
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime=finfo_file($finfo, $filename);
$ext=getExtFromMime($mime); //Simple switch lookup table
if($ext==pathinfo($filename, PATHINFO_EXTENSION)) {//File is okay}
else {//file is bad}
除了我与Microsoft文件相关的问题外,您认为这种方法有什么问题吗
PHP finfo_文件用于为MS Word 2007、Excel 2007和PowerPoint 2007文件提供相同的mime应用程序/zip类型。然后,PHP>=5.3.11和>=5.4.1将返回的mime类型从application/zip更改为2003 mime
应用程序/msword
应用程序/vnd.ms-excel
应用程序/vnd.ms-powerpoint。
但是,这三种文件类型的正确mime类型如下:
application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/vnd.openxmlformats-officedocument.presentationml.presentation
如何为2007文件获取正确的mime类型,以便确认它们是否与文件类型匹配?问题是,人们仍然可能伪造mime类型和扩展名。您可以以二进制模式打开文件,并在某些位置检查某些字节,以真正验证其类型。@crush。文件信息不是这样做的吗?Per:本模块中的函数通过查找文件中特定位置的某些魔法字节序列,尝试猜测文件的内容类型和编码。虽然这不是一个防弹的方法,但使用的启发式方法做得很好。看来你是对的。finfo_文件的实际文档页面没有提到这一点。如果PHP自动将它们分组为更通用的mime类型,则可能必须自己进行字节检查。