MIME-typdetektor

Nästa

Filändelser ljuger, vem som helst kan döpa om malware.exe till photo.jpg. Det tillförlitliga sättet att veta vad en fil verkligen är, är att läsa dess första byte, där de flesta format placerar en signatur (“magiskt tal”) som identifierar formatet oavsett namn. Den här detektorn läser signaturen på vilken släppt fil som helst och returnerar den kanoniska MIME-typen plus den vanligaste ändelsemappningen, så att du kan verifiera att en uppladdning är det klienten påstår.

Så fungerar MIME-detektering

  1. 1

    Släpp en fil

    Vilken storlek som helst; endast de första 4–16 KB läses.

  2. 2

    Läs magiska byte

    De flesta format börjar med en känd signatur.

  3. 3

    Matcha mot en signaturdatabas

    Detektorn använder samma regler som `file(1)` / libmagic.

  4. 4

    Returnera MIME + ändelse

    Visar medietypen enligt RFC 6838, den kanoniska ändelsen och en läsbar etikett.

Exempel på signaturer

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

Varför ändelser inte räcker

  • Säkerhet. En uppladdad resume.pdf som egentligen är en .exe kringgår naiva ändelsefilter. MIME-detektering på serversidan är lösningen.
  • Content-Type-avvikelse. En webbläsare kan skicka fel MIME för en uppladdning; att läsa magiska byte berättar vad datan faktiskt är.
  • Återställda säkerhetskopior. Ändelser går ibland förlorade eller tas bort; innehållssniffning låter dig identifiera vad varje fil är.

Den ZIP-baserade familjen

Många moderna format är ZIP-arkiv under huven, de börjar med PK\x03\x04 som vilken ZIP som helst:

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

För att skilja dem åt tittar detektorn in i ZIP-filen efter en manifestfil ([Content_Types].xml för OOXML, mimetype för ODF / EPUB).

Användbara kombinationer

  • Första 512 byte täcker de flesta formatsignaturer.
  • Första 4 KB täcker ZIP-baserade format där manifestet ligger längre in.
  • Första 16 KB täcker gränsfall som vissa multimediebehållare.

Inte perfekt

  • Vanliga textfiler har inga magiska byte. Detektorn faller tillbaka på heuristik (är det giltig UTF-8? ser det ut som JSON eller XML?).
  • Krypterade / obfuskerade filer kan se ut som slumpmässiga byte utan någon igenkännbar signatur.
  • Formattvetydighet. audio/wav och video/avi börjar båda med RIFF; detektorn kontrollerar den sekundära identifieraren (WAVE kontra AVI fyra byte senare).

Vanliga frågor

Nej. Detekteringen körs i din webbläsare, endast de första KB läses och matchas mot en signaturdatabas på klientsidan. Inget lämnar din enhet.

Eftersom OOXML, ODF, EPUB och JAR alla börjar med ZIP-signaturen. Detektorn tittar in för att hitta det formatspecifika manifestet och returnera den mer specifika MIME-typen (application/vnd.openxmlformats-...).

Det fångar naiv omdöpning, en .exe omdöpt till .jpg visas som körbar utifrån sina magiska byte. Sofistikerade angripare bäddar in nyttolaster i riktiga mediefiler eller använder polyglotfiler som matchar flera signaturer; de besegrar enkel detektering.

Vanlig text har inga magiska byte. Detektorn kör heuristik: giltig UTF-8? giltig JSON? XML-deklaration? CSV-struktur? Annars faller den tillbaka på text/plain.

Signaturdatabasen är liknande (härledd från Unix libmagic-regler). Resultaten bör stämma för vanliga format. Obskyra eller anpassade format kan skilja sig.

Relaterade verktyg

Verktyget finns på andra språk