Detector de Tipo MIME

Próximo

Extensões de arquivo mentem, qualquer um pode renomear malware.exe para photo.jpg. A maneira confiável de saber o que um arquivo realmente é, é ler seus primeiros bytes, onde a maioria dos formatos coloca uma assinatura (“número mágico”) que identifica o formato independentemente do nome. Este detector lê a assinatura de qualquer arquivo solto e retorna o tipo MIME canônico além do mapeamento de extensão mais comum, para que você possa verificar se um upload é o que o cliente afirma.

Como funciona a detecção de MIME

  1. 1

    Solte um arquivo

    Qualquer tamanho; apenas os primeiros 4–16 KB são lidos.

  2. 2

    Leia os bytes mágicos

    A maioria dos formatos começa com uma assinatura conhecida.

  3. 3

    Compare com um banco de dados de assinaturas

    O detector usa as mesmas regras que `file(1)` / libmagic.

  4. 4

    Retorne MIME + extensão

    Mostra o tipo de mídia RFC 6838, a extensão canônica e um rótulo humano.

Assinaturas de exemplo

Formato Primeiros bytes (hex) 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 (ou específico)
gzip 1F 8B 08 application/gzip
MP4 (ISO BMFF) 00 00 00 XX 66 74 79 70 video/mp4
MP3 49 44 33 ou FF FB audio/mpeg
FLAC 66 4C 61 43 audio/flac
WAV 52 49 46 46 ... 57 41 56 45 audio/wav
ELF (binário Linux) 7F 45 4C 46 application/x-executable
Windows PE (exe) 4D 5A application/x-msdownload

Por que extensões não são suficientes

  • Segurança. Um resume.pdf enviado que na verdade é um .exe contorna filtros de extensão ingênuos. A detecção de MIME do lado do servidor é a solução.
  • Desvio de Content-Type. Um navegador pode enviar o MIME errado para um upload; ler bytes mágicos diz o que os dados realmente são.
  • Backups restaurados. Extensões às vezes se perdem ou são removidas; a detecção de conteúdo permite identificar o que cada arquivo é.

A família baseada em ZIP

Muitos formatos modernos são arquivos ZIP por baixo, eles começam com PK\x03\x04 como qualquer ZIP:

  • Office Open XML: .docx, .xlsx, .pptx.
  • OpenDocument: .odt, .ods, .odp.
  • EPUB: .epub.
  • Android APK: .apk.
  • Java JAR: .jar.

Para distingui-los, o detector espiará dentro do ZIP em busca de um arquivo de manifesto ([Content_Types].xml para OOXML, mimetype para ODF / EPUB).

Combinações úteis

  • Primeiros 512 bytes cobrem a maioria das assinaturas de formato.
  • Primeiros 4 KB cobrem formatos baseados em ZIP onde o manifesto aparece mais adiante.
  • Primeiros 16 KB cobrem casos extremos como alguns contêineres multimídia.

Não é perfeito

  • Arquivos de texto simples não têm bytes mágicos. O detector recorre a heurísticas (é válido UTF-8? parece JSON ou XML?).
  • Arquivos criptografados / ofuscados podem parecer bytes aleatórios sem assinatura reconhecível.
  • Ambiguidade de formato. audio/wav e video/avi ambos começam com RIFF; o detector verifica o identificador secundário (WAVE vs. AVI quatro bytes depois).

Perguntas frequentes

Não. A detecção ocorre no seu navegador, apenas os primeiros poucos KB são lidos e comparados com um banco de dados de assinaturas do lado do cliente. Nada sai do seu dispositivo.

Porque OOXML, ODF, EPUB e JAR todos começam com a assinatura ZIP. O detector espiará dentro para encontrar o manifesto específico do formato e retornar o MIME mais específico (application/vnd.openxmlformats-...).

Ele pega renomeações ingênuas, um .exe renomeado para .jpg aparecerá como executável pelos seus bytes mágicos. Atacantes sofisticados embutem cargas úteis dentro de arquivos de mídia reais ou usam arquivos poliglotas que correspondem a várias assinaturas; esses derrotam a detecção simples.

Texto simples não tem bytes mágicos. O detector executa heurísticas: válido UTF-8? válido JSON? declaração XML? estrutura CSV? Caso contrário, recorre a text/plain.

O banco de dados de assinaturas é semelhante (derivado das regras do Unix libmagic). Os resultados devem coincidir para formatos comuns. Formatos obscuros ou personalizados podem diferir.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas