Was sind Dateistrukturen?

Dateistrukturen legen fest, wie ein Format Header, Metadaten, Nutzdaten, Indizes, Prüfsummen und andere Bytefolgen anordnet. Ihre Regeln bestimmen, wie Software gespeicherte Daten findet und interpretiert.

So funktionieren Dateistrukturen

Die Struktur eines Dateiformats ist seine Parsing-Grammatik auf Byteebene. Sie besteht häufig aus geordneten Datensätzen, verschachtelten Chunks, längenbegrenzten Boxen oder Segmenten, die durch Marker getrennt sind. PNG besteht beispielsweise aus einer acht Byte langen Signatur, gefolgt von Chunks, die jeweils eine Länge, einen vier Byte langen Typ, Daten und eine CRC enthalten. Dateien der MP4-Familie verschachteln typisierte Boxen. ZIP platziert vor jeder gespeicherten Datei einen lokalen Header und nach den Dateidaten ein zentrales Verzeichnis. Klassisches TIFF (TIFF 6.0) beginnt mit einem acht Byte langen Header, der auf ein Verzeichnis verweist. Dieses kann an jeder nachfolgenden Wortgrenze beginnen, also an einem geraden Byte-Offset. Header legen die Interpretation fest, während Indizes und Offsets den nicht sequenziellen Zugriff auf Nutzdaten an anderen Stellen der Datei ermöglichen. Das unterscheidet sich von einem Codec, der definiert, wie ein einzelner Medienstrom komprimiert wird. Demuxer, Validatoren, Reparaturtools, Metadatenleser und Sicherheitsscanner nutzen Kenntnisse dieser Strukturen.

Wichtige Fakten

  1. Eine Signatur am Dateianfang grenzt die Formatfamilie ein, bestimmt aber häufig noch nicht das Format. Die WHATWG-Signaturen zur MIME-Erkennung für WAVE, AVI und WebP beginnen alle mit RIFF. Die Bytes ab Offset 8 unterscheiden sie voneinander. Ein öffentlicher Fehlerbericht zu einer Bibliothek zur Dateityperkennung zeigt, dass Dateien vom Typ .docx, .pptx und .xlsx aus einer Office-Suite lediglich als application/zip statt als ihre jeweiligen Dokumenttypen erkannt wurden. Die Fehlerbehebung erklärt den Grund: Diese Suite speichert [Content_Types].xml, das die Bibliothek zur Typerkennung liest, nach den Inhaltseinträgen und damit außerhalb des Ausschnitts, den der Stream-Modus der Bibliothek standardmäßig liest. Eine Signatur sagt außerdem nichts über den Rest der Datei aus: Laut PNG-Spezifikation gewinnen Decoder zusätzliche Sicherheit bei der Erkennung durch den nachfolgenden Chunk IHDR und die CRC jedes Chunks.
  2. Klären Sie vor dem Verschieben von Bytes, von welchem Bezugspunkt jeder Offset gemessen wird. TIFF-Offsets zählen vom Dateianfang aus, und das Verzeichnis kann auf die Bilddaten folgen, die es beschreibt. ZIP-Leser finden Einträge über ein zentrales Verzeichnis hinter den Dateidaten. Dessen Datensätze geben den Offset jedes lokalen Headers an. In Dateien der MP4-Familie enthält die Box stco absolute Chunk-Offsets, während ein Filmfragment seine Daten relativ zur umschließenden Box moof adressieren kann. Absolute Offsets werden falsch, wenn sich ihre Ziele verschieben oder wenn vor diesen Zielen Daten eingefügt oder entfernt werden, sofern die schreibende Software sie nicht neu berechnet.
  3. Die Byte-Reihenfolge ist eine Eigenschaft des Formats, nicht des Rechners, der es liest. PNG speichert Ganzzahlen aus mehreren Bytes mit dem höchstwertigen Byte zuerst, OpenEXR verwendet Little-Endian. ZIP tut dasselbe, sofern seine Spezifikation für ein Feld nichts anderes vorgibt. TIFF deklariert seine Reihenfolge in den ersten beiden Bytes (II für Little-Endian, MM für Big-Endian). Ein TIFF-Leser muss daher beide Varianten verarbeiten können. Decodieren Sie jedes Längen- und Offset-Feld explizit in der Byte-Reihenfolge, die das Format dafür vorgibt, statt rohe Bytes in native Ganzzahlen umzuwandeln.
  4. Datensätze mit vorangestellter Länge erlauben es einem Leser, Unbekanntes zu überspringen. Das Format bestimmt jedoch, wann das sicher ist. PNG bildet diese Regel im Chunk-Namen ab: Ein unbekannter ergänzender Chunk darf ignoriert werden, während ein unbekannter kritischer Chunk für einen Decoder, der das Bild extrahieren soll, einen fatalen Fehler darstellt. Überspringen setzt außerdem voraus, dass das Längenfeld vertrauenswürdig ist. Die PNG-Spezifikation warnt: Werden CRCs nicht geprüft, kann eine fehlerhafte Chunk-Länge einen Decoder aus dem Takt bringen, sodass er spätere Daten fälschlich als Chunk-Header liest. Ein schlecht geschriebener Decoder kann zudem einen Pufferüberlauf verursachen, da Chunks bis zu 2^31-1 Bytes lang sein können. Prüfen Sie jede Länge und jeden Offset vor der Verwendung anhand der tatsächlich verfügbaren Bytes. Schreiben und Lesen außerhalb gültiger Speichergrenzen belegen den fünften und achten Platz in der CWE Top 25 von MITRE für 2025.

Wann Dateistrukturen relevant sind

Entwickler untersuchen Dateistrukturen, wenn sie Parser entwickeln, Uploads validieren, beschädigte Dateien reparieren oder eingebettete Daten extrahieren. Werden Offsets oder die Byte-Reihenfolge ignoriert, kann das zu ungültigen Lesezugriffen und Sicherheitslücken führen.

Quellen

Machen Sie aus Medienwissen eine funktionierende Pipeline

Verbinden Sie Uploads, Verarbeitung, KI, Storage und Auslieferung über eine deklarative API – um Encoding-Stack, Skalierung und ständig wechselnde Formate müssen Sie sich nicht selbst kümmern.

Transloadit kostenlos ausprobieren