You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Base64字符串获取文件扩展名/MIME类型并完成格式校验

基于魔数的文件类型校验解决方案

你可以按照以下方案实现完全不依赖文件名后缀的文件类型校验:

前置处理逻辑

你拿到的Base64字符串不需要全量解码,只需要取前20个字节的二进制内容就可以覆盖绝大多数文件的魔数长度,能大幅降低大文件校验的性能损耗。如果Base64带有data:[mime];base64,这类格式前缀,先把前缀去掉再做解码。

通用魔数对应表(覆盖99%常用业务场景)

你可以直接用下表整理自己的校验规则,所有魔数为十六进制格式:

  • FF D8 FF:jpg/jpeg,对应MIME类型image/jpeg
  • 89 50 4E 47 0D 0A 1A 0A:png,对应MIME类型image/png
  • 47 49 46 38:gif,对应MIME类型image/gif
  • 42 4D:bmp,对应MIME类型image/bmp
  • 25 50 44 46:pdf,对应MIME类型application/pdf
  • 50 4B 03 04:zip、docx、xlsx、pptx、apk、jar,通用MIME类型application/zip,细分类型可进一步解析内部结构判断
  • D0 CF 11 E0 A1 B1 1A E1:doc、xls、ppt,对应MIME类型application/msword
  • 52 61 72 21 1A 07 00:rar,对应MIME类型application/x-rar-compressed
  • 1F 8B 08:gz,对应MIME类型application/gzip
  • 75 73 74 61 72:tar,对应MIME类型application/x-tar
  • 4D 5A:exe、dll,对应MIME类型application/octet-stream
  • 3C 3F 78 6D 6C 20:xml,对应MIME类型text/xml
  • 3C 68 74 6D 6C/3C 21 44 4F 43 54 59 50 45 20 68 74 6D 6C:html,对应MIME类型text/html
  • FF FB/FF F3/FF F2/49 44 33:mp3,对应MIME类型audio/mpeg
  • 00 00 00 20 66 74 79 70 69 73 6F 6D/00 00 00 18 66 74 79 70 6D 70 34 32:mp4,对应MIME类型video/mp4
  • 1A 45 DF A3:mkv,对应MIME类型video/x-matroska

校验流程建议

  1. 解码Base64前20个字节,转为统一大小写的十六进制字符串
  2. 用十六进制字符串和魔数表做前缀匹配,得到校验出的文件类型
  3. 可按需将校验出的类型和文件名后缀做二次比对,不符合的直接拦截
  4. 针对无固定魔数的文本类文件(txt、json、csv等),补充内容特征校验:比如json尝试做格式解析、csv校验分隔符和行列结构、txt校验是否全为可打印字符

注意事项

魔数校验是基础校验手段,无法100%判定文件真实类型,建议搭配文件大小限制、内容恶意特征扫描等多重规则共同校验,避免恶意文件拼接绕过。

内容的提问来源于stack exchange,提问作者campi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:15:01