MIME类型检测器

下一步

文件扩展名具有欺骗性,任何人都可以将 malware.exe 重命名为 photo.jpg。要准确识别文件的真实格式,最可靠的方法是读取其前几个字节:大多数文件格式都会在其中嵌入一个标识符(“魔数”),该标识符可独立于文件名称识别其格式。此检测工具可读取任意上传文件的魔数,并返回对应的标准 MIME 类型及最常见的扩展名映射关系,从而帮助您验证上传文件是否与客户端声明的内容一致。

MIME检测的工作原理

  1. 1

    拖放文件

    任意大小;仅读取前4–16 KB数据。

  2. 2

    读取魔数字节

    大多数格式均以已知签名开头。

  3. 3

    与签名数据库进行匹配

    该检测器采用与`file(1)`/libmagic相同的规则。

  4. 4

    返回 MIME+扩展名

    显示RFC 6838媒体类型、标准扩展名及人工标注标签。

示例签名

格式 前几位字节(十六进制) MIME
JPEG FF D8 FF image/jpeg
PNG 89 50 4E 47 0D 0A 1A 0A image/png
GIF87a 47 49 46 38 37 61 image/gif
GIF89a 47 49 46 38 39 61 image/gif
WebP 52 49 46 46 ... 57 45 42 50 image/webp
PDF 25 50 44 46 (%PDF) application/pdf
ZIP / JAR / ODT / DOCX 50 4B 03 04 application/zip(或特定版本)
gzip 1F 8B 08 application/gzip
MP4(ISO BMFF) 00 00 00 XX 66 74 79 70 video/mp4
MP3 49 44 33FF FB audio/mpeg
FLAC 66 4C 61 43 audio/flac
WAV 52 49 46 46 ... 57 41 56 45 audio/wav
ELF(Linux二进制文件) 7F 45 4C 46 application/x-executable
Windows PE (exe) 4D 5A application/x-msdownload

为什么仅凭扩展名还不够

  • 安全性。 上传的文件 resume.pdf 实际上是 .exe,可绕过基础扩展名过滤机制;通过服务器端 MIME 检测即可解决该问题。
  • Content-Type不匹配。 浏览器可能为上传文件发送了错误的MIME类型;通过解析魔数字节可了解数据的实际内容。
  • 已恢复的备份。 扩展名有时可能丢失或被移除;通过内容解析功能可识别每个文件的具体类型。

基于 ZIP 的格式家族

许多现代格式本质上都是ZIP压缩包,它们的文件名以PK\x03\x04开头,与普通ZIP文件完全相同:

  • Office Open XML: .docx.xlsx.pptx
  • OpenDocument: .odt, .ods, .odp.
  • EPUB格式: .epub
  • 安卓 APK : .apk
  • Java JAR文件: .jar

为区分这些文件,检测器会扫描ZIP压缩包内部以查找清单文件(OOXML 对应[Content_Types].xml, ODF / EPUB 对应mimetype)。

实用组合

  • 前 512 字节涵盖了大多数格式特征码。
  • 前4 KB包含基于ZIP格式的文件,其清单文件位于该区域的后续部分。
  • 前16 KB涵盖了一些特殊场景(如某些多媒体容器)。

不完美

  • 纯文本文件不含特殊字节。检测器会采用启发式方法进行判断(例如:是否符合 UTF -8规范?是否呈现 JSON 或XML格式?)。
  • 加密/混淆后的文件可能呈现为无明显特征的随机字节序列。
  • 格式歧义。 audio/wavvideo/avi均以RIFF开头;检测器会检查次级标识符(分别为WAVE及后续四个字节处的AVI )。

常见问题

不。检测过程在您的浏览器中运行,仅读取前几KB数据并与客户端签名数据库进行比对,不会有任何数据离开您的设备。

由于 OOXML 、 ODF 、 EPUB 和JAR文件均以ZIP签名开头,检测器会解析其内部内容以识别特定格式的清单文件,并返回更具体的MIME类型(application/vnd.openxmlformats-...)。

该机制可检测简单的重命名行为,例如将.exe重命名为.jpg后,其魔数字节仍会显示为可执行文件。高阶攻击者则会在真实媒体文件中嵌入有效载荷,或使用能匹配多种特征码的多语言文件;这些手段均可规避简单的检测机制。

纯文本不含特殊编码字节。检测器采用启发式算法:符合 UTF -8规范?符合 JSON 格式?符合XML声明?符合CSV结构?否则默认使用text/plain编码。

签名数据库结构相似(基于Unix libmagic规则推导而来)。对于常见格式,结果应一致;而对于复杂或自定义格式,则可能出现差异。

相关工具

此工具还提供其他语言版本