ShuanghongS 1 mês atrás
pai
commit
c5fbe7c0b2
2 arquivos alterados com 44 adições e 26 exclusões
  1. 18 1
      service/ocean_order.class.php
  2. 26 25
      utils/utils.class.php

Diferenças do arquivo suprimidas por serem muito extensas
+ 18 - 1
service/ocean_order.class.php


+ 26 - 25
utils/utils.class.php

@@ -892,32 +892,33 @@ class utils {
     }
 
     public static function hasMacros($filePath) {
-        $extension = pathinfo($filePath, PATHINFO_EXTENSION);
-        if ($extension === 'xlsx') {
-            // 检查 .xlsx 文件
-            $zip = new ZipArchive();
-            if ($zip->open($filePath) === TRUE) {
-                // 检查是否存在 vbaProject.bin 文件
-                $hasMacros = $zip->locateName('xl/vbaProject.bin') !== false;
-                $zip->close();
-                return $hasMacros;
-            } else {
-                return false; // 无法打开文件
-            }
-        } elseif ($extension === 'docx') {
-            // 检查 .docx 文件
-            $zip = new ZipArchive();
-            if ($zip->open($filePath) === TRUE) {
-                // 检查是否存在 vbaProject.bin 文件
-                $hasMacros = $zip->locateName('word/vbaProject.bin') !== false;
-                $zip->close();
-                return $hasMacros;
-            } else {
-                return false; // 无法打开文件
-            }
-        } else {
-            return false; // 不是支持的文件类型
+        //$extension = pathinfo($filePath, PATHINFO_EXTENSION);
+        //在 MIME 校验之后,再加一层 ZIP 宏检测(同时查 xl/ 和 word/)
+        $zip = new ZipArchive();
+        if ($zip->open($filePath) !== true) {
+            // 无法打开为 ZIP:可能是 .xls/.doc 或损坏文件
+            // 由于你只允许 .xlsx/.docx/.pdf,这类文件应已被 MIME 拦截
+            return false;
         }
+        // 同时检查 Excel 和 Word 的宏路径!
+        $hasExcelMacro = $zip->locateName('xl/vbaProject.bin') !== false;
+        $hasWordMacro  = $zip->locateName('word/vbaProject.bin') !== false;
+
+        $zip->close();
+        return $hasExcelMacro || $hasWordMacro;
+
+        // if ($extension === 'xlsx') {
+        //     // 检查 .xlsx 文件
+        //     $zip = new ZipArchive();
+        //     if ($zip->open($filePath) === TRUE) {
+        //         // 检查是否存在 vbaProject.bin 文件
+        //         $hasMacros = $zip->locateName('xl/vbaProject.bin') !== false;
+        //         $zip->close();
+        //         return $hasMacros;
+        //     } else {
+        //         return false; // 无法打开文件
+        //     }
+        // } 
     } 
 
     public static function arrayKeyToInt($arr){

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff