Detector de tipo MIME

Siguiente

Las extensiones de archivo mienten: cualquiera puede renombrar malware.exe a photo.jpg. La forma confiable de saber qué es realmente un archivo es leer sus primeros bytes, donde la mayoría de los formatos colocan una firma (“número mágico”) que identifica el formato independientemente del nombre. Este detector lee la firma de cualquier archivo arrastrado y devuelve el tipo MIME canónico más el mapeo de extensión más común, para que puedas verificar que una carga es lo que el cliente afirma.

Cómo funciona la detección de MIME

  1. 1

    Suelta un archivo

    Cualquier tamaño; solo se leen los primeros 4–16 KB.

  2. 2

    Leer bytes mágicos

    La mayoría de los formatos comienzan con una firma conocida.

  3. 3

    Comparar con una base de datos de firmas

    El detector utiliza las mismas reglas que `file(1)` / libmagic.

  4. 4

    Devolver MIME + extensión

    Muestra el tipo de medio RFC 6838, la extensión canónica y una etiqueta comprensible.

Ejemplos de firmas

Formato Primeros 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 (o 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 o FF FB audio/mpeg
FLAC 66 4C 61 43 audio/flac
WAV 52 49 46 46 ... 57 41 56 45 audio/wav
ELF (binario de Linux) 7F 45 4C 46 application/x-executable
Windows PE (exe) 4D 5A application/x-msdownload

Por qué las extensiones no son suficientes

  • Seguridad. Un resume.pdf subido que en realidad es un .exe elude filtros de extensión ingenuos. La detección de MIME del lado del servidor es la solución.
  • Desajuste de Content-Type. Un navegador puede enviar el MIME incorrecto para una carga; leer bytes mágicos te dice qué es realmente los datos.
  • Copias de seguridad restauradas. A veces se pierden o eliminan las extensiones; la detección de contenido te permite identificar qué es cada archivo.

La familia basada en ZIP

Muchos formatos modernos son archivos ZIP bajo el capó: comienzan con PK\x03\x04 como cualquier ZIP:

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

Para distinguirlos, el detector inspecciona el ZIP en busca de un archivo de manifiesto ([Content_Types].xml para OOXML, mimetype para ODF / EPUB).

Combinaciones útiles

  • Primeros 512 bytes cubren la mayoría de las firmas de formato.
  • Primeros 4 KB cubren formatos basados en ZIP donde el manifiesto aparece más adelante.
  • Primeros 16 KB cubren casos extremos como algunos contenedores multimedia.

No es perfecto

  • Archivos de texto plano no tienen bytes mágicos. El detector recurre a heurísticas (¿es válido UTF-8? ¿parece JSON o XML?).
  • Archivos encriptados / ofuscados pueden parecer bytes aleatorios sin firma reconocible.
  • Ambigüedad de formato. audio/wav y video/avi ambos comienzan con RIFF; el detector verifica el identificador secundario (WAVE vs. AVI cuatro bytes después).

Preguntas frecuentes

No. La detección se realiza en tu navegador: solo se leen y comparan los primeros KB contra una base de datos de firmas del lado del cliente. Nada sale de tu dispositivo.

Porque OOXML, ODF, EPUB y JAR todos comienzan con la firma ZIP. El detector inspecciona el interior para encontrar el manifiesto específico del formato y devolver el MIME más específico (application/vnd.openxmlformats-...).

Atrapa renombramientos ingenuos: un .exe renombrado a .jpg aparecerá como ejecutable por sus bytes mágicos. Los atacantes sofisticados incrustan cargas útiles dentro de archivos de medios reales o utilizan archivos poliglotas que coinciden con múltiples firmas; esos eluden la detección simple.

El texto plano no tiene bytes mágicos. El detector aplica heurísticas: ¿es válido UTF-8? ¿JSON válido? ¿Declaración XML? ¿Estructura CSV? De lo contrario, recurre a text/plain.

La base de datos de firmas es similar (derivada de las reglas de Unix libmagic). Los resultados deberían coincidir para formatos comunes. Los formatos oscuros o personalizados pueden diferir.

Herramientas relacionadas

Herramienta disponible en otros idiomas