MIME Type — mi ez, fájltípusok és meghatározás iOS-ben

Szerző: IT Sectr Megjelenés: 2026-07-11 Olvasási idő: 7 perc

MIME Type — egy szabványosított adatformátum-azonosító, amelyet iOS-ben használnak a fájltípus meghatározására hálózaton, fájlrendszeren és folyamatok közötti kommunikáción keresztül történő átvitel során. A Apple Developer Documentation, 2024 szerint a MIME Type (Multipurpose Internet Mail Extensions) a fájlokat tartalmuk szerint osztályozza: image/jpeg, application/pdf, text/plain. Az iOS a MIME-t UTType-on keresztül UTI-vé (Uniform Type Identifier) konvertálja a fájlok rendszerszintű feldolgozásához.

Főbb pontok

  • MIME Type — adatformátum-azonosító két részből: típus/altípus (image/png)
  • UTType — a MIME iOS megfelelője, amelyet a rendszer belsőleg használ fájltípusok azonosítására
  • Konverzió MIME és UTI között UTType.preferredMIMEType-on keresztül történik
  • MIME meghatározása fájlkiterjesztés, tartalom (magic bytes) vagy HTTP fejléc alapján lehetséges
  • iOS Sandbox korlátozza az ismeretlen típusú fájlokhoz való hozzáférést — fontos az egyedi típusok helyes regisztrálása

Mi az a MIME Type?

MIME Type (Multipurpose Internet Mail Extensions) — egy szabványosított adatformátum-azonosító, amely két részből áll: fő típus (type) és altípus (subtype), perjellel elválasztva. Fő kategóriák: text (szöveg), image (képek), audio (hang), video (videó), application (bináris adatok), multipart (összetett üzenetek).

A MIME szabványt eredetileg e-mail mellékletekhez fejlesztették ki (RFC 2046, 1996), de ma már mindenhol használják: a HTTP szerverek a válasz Content-Type-ját jelzik, a böngészők meghatározzák a fájlok feldolgozásának módját, a mobilalkalmazások pedig — hogy milyen adatok nyithatók meg. Az IANA (Internet Assigned Numbers Authority) nyilvántartja a regisztrált MIME típusokat.

A IANA Media Types Registry (2024) szerint több mint 1800 hivatalos MIME típus van regisztrálva, és a tényleges szám az egyedi és szállítói típusokkal együtt meghaladja az 5000-et. Az iOS támogatja a legtöbb szabványos típust, és API-t biztosít a velük való munkához a Uniform Type Identifiers segítségével.

MIME és UTI iOS-ben: különbségek és konverzió

UTI (Uniform Type Identifier) — az Apple saját tartalomtípus-azonosító rendszere, amelyet iOS és macOS rendszeren belül használnak. A MIME-től eltérően az UTI támogatja az öröklődési hierarchiát (pl. public.image — szülő a public.png és public.jpeg számára), és nemcsak fájlformátumokat, hanem absztrakt adattípusokat is magában foglal.

MIME TypeUTIKiterjesztésLeírás
image/jpegpublic.jpeg.jpg, .jpegJPEG kép
application/pdfcom.adobe.pdf.pdfPDF dokumentum
text/plainpublic.plain-text.txtSzöveges fájl
application/jsonpublic.json.jsonJSON adatok
video/mp4public.mpeg-4.mp4MP4 videó

Konverzió MIME és UTI között iOS-ben az UTType osztályon (iOS 14+) keresztül történik. A rendszer belső megfelelési adatbázist tart fenn, amely a legtöbb szabványos formátumot lefedi. Egyedi típusokhoz a fejlesztő regisztrálja a megfelelést az Info.plist-ben.

swift
import UniformTypeIdentifiers

let mimeType = "image/jpeg"
if let uti = UTType(mimeType: mimeType) {
    print("UTI: \(uti.identifier)")
    print("Conforms to image: \(uti.conforms(to: .image))")
    print("Extension: \(uti.preferredFilenameExtension ?? "")")
}

// Fordított konverzió: UTI MIME-be
if let uti = UTType(filenameExtension: "pdf"),
   let mime = uti.preferredMIMEType {
    print("MIME for PDF: \(mime)")
}

UTI hierarchia lehetővé teszi annak ellenőrzését, hogy egy típus megfelel-e egy adott kategóriának. Például minden képtípus (JPEG, PNG, GIF) conforms(to: .image). Ez kényelmes a csoportos szűréshez és annak meghatározásához, hogy a típust a rendszerkomponensek képesek-e feldolgozni.

Fontos különbség: MIME — lapos osztályozás (nincs öröklődés), míg az UTI támogatja a többszörös öröklődést. Például a public.html megfelel mind a public.source-code-nak, mind a public.text-nek. Ez rugalmasabb útválasztást biztosít a fájlok iOS-ben történő feldolgozásakor.

Hogyan határozzuk meg egy fájl MIME Type-ját iOS-ben

Három módszer áll rendelkezésre a MIME Type meghatározására iOS-ben: fájlkiterjesztés alapján (gyors, de megbízhatatlan), tartalom alapján magic bytes segítségével (megbízható, de a fájl olvasását igényli) és HTTP Content-Type fejléc alapján (csak hálózati kérésekhez).

swift
import UniformTypeIdentifiers

enum MIMEDetector {
    // Felderítés kiterjesztés alapján
    static func fromExtension(_ ext: String) -> String? {
        UTType(filenameExtension: ext)?.preferredMIMEType
    }

    // Felderítés tartalom alapján (magic bytes)
    static func fromFile(at url: URL) -> String? {
        guard let handle = try? FileHandle(forReadingFrom: url) else {
            return nil
        }
        defer { handle.closeFile() }
        let header = handle.readData(ofLength: 12)

        // PNG: 89 50 4E 47 0D 0A 1A 0A
        // JPEG: FF D8 FF
        // PDF: 25 50 44 46
        // ZIP: 50 4B 03 04

        if header.starts(with: [0x89, 0x50, 0x4E, 0x47]) {
            return "image/png"
        }
        if header.starts(with: [0xFF, 0xD8, 0xFF]) {
            return "image/jpeg"
        }
        if header.starts(with: [0x25, 0x50, 0x44, 0x46]) {
            return "application/pdf"
        }
        return nil
    }
}

Meghatározás kiterjesztés alapján UTType-on keresztül — a leggyorsabb módszer, de megbízhatatlan, ha a kiterjesztés hiányzik vagy hamisított. Egy támadó átnevezheti az .exe fájlt .jpg-re — a rendszer image/jpeg-ként határozza meg, pedig a fájl végrehajtható. Kritikus forgatókönyvekhez (biztonság, orvosi adatok) kötelezően használjon tartalom szerinti ellenőrzést.

Magic bytes — a fájl első bájtjai, amelyek minden formátumra egyediek. A legtöbb formátum 2–12 bájtból álló aláírással rendelkezik. Az iOS nem biztosít beépített MIME-detektort tartalom alapján — a fejlesztő vagy saját maga implementál egy aláírási táblát, vagy olyan könyvtárakat használ, mint a CocoaLumberjack, vagy egy heurisztikákon alapuló egyedi detektort.

Egyedi MIME és UTI típusok regisztrálása

Egyedi típusok akkor szükségesek, amikor az alkalmazás saját tulajdonú adatformátumokkal dolgozik, amelyek nincsenek regisztrálva az IANA-nál vagy az Apple-nél. Az Info.plist-ben történő regisztráció lehetővé teszi az iOS számára, hogy helyesen dolgozza fel az ilyen fájlokat: megnyissa őket a Files.app-ból, ikonokat jelenítsen meg, és továbbítsa őket más alkalmazásoknak az UIActivityViewController segítségével.

xml
<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>MyApp Document</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.myapp.secret-doc</string>
        </array>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.myapp.secret-doc</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array><string>sdoc</string></array>
            <key>public.mime-type</key>
            <array><string>application/vnd.myapp.secret-doc</string></array>
        </dict>
    </dict>
</array>

Egy egyedi típus regisztrálásához meg kell adni az Info.plist-ben: UTI azonosítót (reverse-DNS formátumban), megfelelést a szülő típusoknak, fájlkiterjesztést és MIME típust. Az iOS ezt az információt használja a fájlok útválasztásához: amikor egy felhasználó megnyit egy .sdoc fájlt, a rendszer tudja, hogy a tulajdonosa az Ön alkalmazása.

UTExportedTypeDeclarations — az Ön alkalmazása által meghatározott típusokhoz (export). UTImportedTypeDeclarations — más alkalmazások által létrehozott típusokhoz, amelyekkel az Ön alkalmazása dolgozhat (import). Az Apple azt javasolja, hogy az alkalmazás által használt összes egyedi típust regisztrálja a rendszerrel való helyes integráció érdekében.

Biztonság és ismeretlen típusok feldolgozása

Ismeretlen MIME típusok kockázatot jelentenek az iOS alkalmazás biztonságára. Ha egy fájl ismeretlen vagy nem ellenőrzött típusú, az alkalmazásnak óvintézkedéseket kell tennie: ne nyissa meg automatikusan a fájlt, jelenítsen meg figyelmeztetést a felhasználónak, vagy elemezze a tartalmat a feldolgozás előtt.

Fő fenyegetések: egy hamisított MIME típusú fájl rosszindulatú kódot vagy kihasználást tartalmazhat egy elemző sebezhetőségéhez. Az iOS Sandboxon keresztül védi a rendszert, de az alkalmazás sebezhető lehet, ha a MIME típusban bízik a tartalom ellenőrzése nélkül. Mindig ellenőrizze a fájlt magic bytes segítségével, ha megbízhatatlan forrásból származik.

Az OWASP Mobile Security Guide, 2024 szerint a következő gyakorlatokat alkalmazzák ismeretlen típusú fájlok feldolgozására: utasítsa el az application/octet-stream MIME típusú fájlokat nem ellenőrzött forrásokból; használja az UTType-ot a várt kategóriáknak való megfelelés ellenőrzésére; ne nyisson meg fájlokat külső alkalmazásokban a felhasználó megerősítése nélkül; naplózza az összes eltérést a MIME és a tényleges tartalom között biztonsági audit céljából.

Egyedi MIME típusok regisztrálása az Info.plist-ben — nem csak funkcionalitás, hanem biztonság is. Ha az alkalmazás csak a saját típusait regisztrálja helyesen, a rendszer nem fog tévedésből idegen fájlokat küldeni neki. Használjon specifikus szállítói előtagokat (application/vnd.company.app-format) az általánosak (application/x-format) helyett a más alkalmazásokkal való ütközések elkerülése érdekében.

Gyakran Ismételt Kérdések

Mi az a MIME Type?

MIME Type — egy szabványos adatformátum-azonosító, amely típusból és altípusból áll (például image/jpeg). HTTP szerverek, böngészők és alkalmazások használják a fájl feldolgozási módjának meghatározására.

Miben különbözik az UTI a MIME-től iOS-ben?

UTI (Uniform Type Identifier) — az Apple tartalomtípus-azonosító rendszere az öröklődési hierarchia támogatásával. MIME — lapos szabvány a hálózathoz. Az iOS az UTType-ot használja az UTI és MIME közötti konverzióhoz a preferredMIMEType tulajdonságon keresztül.

Hogyan határozzuk meg egy fájl MIME Type-ját iOS-ben?

Három mód: kiterjesztés alapján UTType(filenameExtension:) segítségével, tartalom alapján magic bytes (a fájl első bájtjai) segítségével, HTTP fejléc alapján Content-Type. A biztonság érdekében használjon tartalom szerinti ellenőrzést, ne csak kiterjesztés alapján.

Hogyan regisztráljunk egyedi MIME típust iOS-ben?

Adja hozzá a UTExportedTypeDeclarations elemet az Info.plist-hez: adja meg az UTI azonosítót (com.company.format), a fájlkiterjesztést, a MIME típust és a szülő típust. Az ezzel a kiterjesztéssel rendelkező fájlok automatikusan az Ön alkalmazásához lesznek társítva.

Mit tegyünk ismeretlen MIME típusokkal?

Ne bízzon ismeretlen MIME-ben. Ellenőrizze a tartalmat magic bytes segítségével, jelenítsen meg figyelmeztetést a felhasználónak, és ne nyissa meg a fájlt automatikusan. Az application/octet-stream típusú fájloknál mindig végezzen heurisztikus elemzést a feldolgozás előtt.

Összefoglalás

  • MIME Type — szabványosított adatformátum-azonosító (típus/altípus), HTTP-ben és iOS-ben használatos
  • UTType — iOS API a tartalomtípusokkal való munkához, támogatja a hierarchiát és MIME→UTI konverziót
  • Típus meghatározása kiterjesztés, magic bytes vagy HTTP Content-Type fejléc alapján történik
  • Egyedi típusok regisztrálása az Info.plist-ben UTExportedTypeDeclarations segítségével
  • Biztonság megköveteli a tartalom ellenőrzését — a fejlécben lévő MIME hamisítható
  • UTI hierarchia lehetővé teszi a fájl kategóriájának (kép, szöveg, videó) ellenőrzését conforms(to:) segítségével
  • Application/octet-stream — univerzális típus ismeretlen bináris adatokhoz, heurisztikus elemzést igényel

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is