diff --git a/pkg/service/file/file.go b/pkg/service/file/file.go index a620ee2e..f271a7e7 100644 --- a/pkg/service/file/file.go +++ b/pkg/service/file/file.go @@ -267,6 +267,7 @@ func TusUpload(ctx *gin.Context) { service.Error(ctx, errors.New(common.ERROR_OPEN_FILE)) return } + if !isLikelyMP4(b) { service.Error(ctx, errors.New("mp4机器码校验失败")) //删除对应空文件 @@ -454,7 +455,9 @@ func GetFileSecurityStatus(ctx *gin.Context) { } func isLikelyMP4(b []byte) bool { + fmt.Println("开始效验机器码") if len(b) < 16 { + fmt.Println("len(b) < 16") return false } // 只扫开头一段,避免性能问题;放宽到 8KB @@ -467,17 +470,20 @@ func isLikelyMP4(b []byte) bool { size := binary.BigEndian.Uint32(b[i : i+4]) typ := string(b[i+4 : i+8]) if size == 0 { + fmt.Println("size == 0") return false } // 处理 extended size(size==1 表示后面是 64-bit size) hdr := uint32(8) if size == 1 { if i+16 > limit { + fmt.Println("i+16 > limit") return false } ext := binary.BigEndian.Uint64(b[i+8 : i+16]) // ext 太大但当前 chunk 不够,就直接退出 if ext > uint64(limit-i) { + fmt.Println("ext > uint64(limit-i)") return false } size = uint32(ext) // 这里只为快速判断;一般 ftyp 不会用到很大的扩展 size @@ -485,7 +491,7 @@ func isLikelyMP4(b []byte) bool { } // 找到 ftyp 就放行(只做基本合法性检查) if typ == "ftyp" { - + fmt.Println("typ == ftyp") major := b[i+int(hdr) : i+int(hdr)+4] minor := binary.BigEndian.Uint32(b[i+int(hdr)+4 : i+int(hdr)+8]) compatStart := i + int(hdr) + 8