MIME-type detector

Volgende

Bestandsextensies kunnen misleiden: iedereen kan een bestand met de extensie malware.exe hernoemen tot photo.jpg. De betrouwbare manier om te bepalen wat een bestand echt is, is het lezen van de eerste paar bytes; bij de meeste formaten bevindt zich daar een signatuur (‘magische nummer’) die het formaat identificeert, onafhankelijk van de naam. Deze detector leest het signatuur van elk bestand en retourneert de standaard-MIME-type samen met de meest gebruikelijke extensiemapping, zodat u kunt controleren of een upload daadwerkelijk overeenkomt met wat de klant heeft aangegeven.

Hoe MIME-detectie werkt

  1. 1

    Een bestand neerzetten

    Elke grootte; alleen de eerste 4–16 KB worden gelezen.

  2. 2

    Lees magische bytes

    De meeste formaten beginnen met een bekende signatuur.

  3. 3

    Vergelijk met een signatuurdatabase

    De detector gebruikt dezelfde regels als `file(1)`/libmagic.

  4. 4

    MIME + extensie retourneren

    Toont de mediatype volgens RFC 6838, de canonieke extensie en een handmatig gekozen label.

Voorbeeldsignatuur

Format Eerste 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 (of specifiek)
gzip 1F 8B 08 application/gzip
MP4 (ISO BMFF) 00 00 00 XX 66 74 79 70 video/mp4
MP3 49 44 33 of FF FB audio/mpeg
FLAC 66 4C 61 43 audio/flac
WAV 52 49 46 46 ... 57 41 56 45 audio/wav
ELF (Linux-binair bestand) 7F 45 4C 46 application/x-executable
Windows PE (exe) 4D 5A application/x-msdownload

Waarom extensies niet voldoende zijn

  • Beveiliging: Een geüpload resume.pdf dat in werkelijkheid een .exe is, omzeilt eenvoudige extensiefilters. De oplossing is servergebaseerde MIME-detectie.
  • Onovereenkomst in Content-Type: Een browser kan een onjuiste MIME-code versturen bij het uploaden van gegevens; het lezen van magic bytes geeft aan wat de gegevens daadwerkelijk zijn.
  • Herstelde back-ups: Extensies kunnen soms verloren gaan of worden verwijderd; met content-analyse kunt u bepalen wat elke bestand inhoudt.

De op ZIP gebaseerde familie

Veel moderne formaten zijn in feite ZIP-archieven; ze beginnen met een extensie als PK\x03\x04, net zoals alle andere ZIP-bestanden.

– Office Open XML: .docx, .xlsx, .pptx.

  • OpenDocument: .odt, .ods, .odp.
  • EPUB: .epub.
  • Android APK: .apk
  • Java JAR: .jar.

Om ze te onderscheiden, onderzoekt de detector de inhoud van het ZIP-bestand op een manifestbestand ([Content_Types].xml voor OOXML, mimetype voor ODF/EPUB).

Nuttige combinaties

  • De eerste 512 bytes omvatten de meeste formaatsignatuurpatronen.
  • De eerste 4 KB omvat ZIP-baserde formaten waarin het manifest verder in het bestand te vinden is.
  • De eerste 16 KB omvat uitzonderlijke gevallen, zoals bepaalde multimediabestanden.

Niet perfect

  • Eenvoudige tekstbestanden bevatten geen magische bytes. De detector maakt gebruik van heuristieke methoden (is het geldig als UTF-8? lijkt het op JSON of XML?).
  • Geëncodeerde/verduisterde bestanden kunnen eruit zien als willekeurige bytes zonder herkenbare signatuur. – Formatonzekerheid: Zowel audio/wav als video/avi beginnen met RIFF; de detector controleert de secundaire identificator (WAVE versus AVI , vier bytes later).

Veelgestelde vragen

Nee, de detectie verloopt in uw browser: alleen de eerste paar KB worden gelezen en vergeleken met een signatuurbank op de clientzijde. Er wordt niets van uw apparaat afgeleverd.

Aangezien OOXML, ODF, EPUB en JAR allemaal beginnen met de ZIP-signatuur, onderzoekt de detector de inhoud om het formaatspecifieke manifest te vinden en retourneert de meer specifieke MIME-code (application/vnd.openxmlformats-...).

Het detecteert naïeve hernoeming: een bestand met de naam .exe dat wordt hernoemd tot .jpg verschijnt als uitvoerbare bestand op basis van zijn specifieke bytepatronen. Geavanceerde aanvallers plaatsen payloads in echte mediabestanden of gebruiken polyglote bestanden die passen bij meerdere detectiepatronen; hierdoor kunnen eenvoudige detectiemethoden worden omzeild.

Eenvoudige tekst bevat geen magische bytes. De detector gebruikt heuristieke algoritmen: geldig UTF-8? geldig JSON? XML-declaratie? CSV-structuur? In alle overige gevallen wordt text/plain gebruikt als standaardcode.

De signatuurdatabase is vergelijkbaar (afgeleid van de regels van Unix libmagic). De resultaten moeten overeenkomen voor veelvoorkomende formaten; voor onduidelijke of aangepaste formaten kunnen er afwijkingen optreden.

Gerelateerde tools

Tool beschikbaar in andere talen