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
- 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,.pptxund.xlsxaus einer Office-Suite lediglich alsapplication/zipstatt 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 ChunkIHDRund die CRC jedes Chunks. - 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
stcoabsolute Chunk-Offsets, während ein Filmfragment seine Daten relativ zur umschließenden Boxmoofadressieren 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. - 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 (
IIfür Little-Endian,MMfü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. - 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
- W3C-Spezifikation für Portable Network Graphics (PNG), dritte Ausgabe: Signatur, Chunk-Aufbau, Namenskonventionen für Chunks, Fehlerbehandlung
- WHATWG-Standard zur MIME-Erkennung: Byte-Muster für Bild-, Audio-, Video- und Archivtypen
- file-type-Issue 785 auf GitHub: Mit LibreOffice gespeicherte docx-, pptx- und xlsx-Dateien werden als application/zip erkannt (Fehlerbericht, im März 2026 als erledigt geschlossen)
- file-type-Commit d4a975c auf GitHub: Behebung von Issue 785; die Commit-Nachricht nennt die Ursache (Reihenfolge der Einträge und standardmäßig gelesener Stream-Ausschnitt)
- TIFF-Spezifikation, Version 6.0: Bilddatei-Header, Byte-Reihenfolge und Offsets
- PKWARE-Spezifikation für das .ZIP-Dateiformat (APPNOTE.TXT): allgemeines Dateiformat und zentrales Verzeichnis
- OpenEXR-Dateiaufbau: grundlegende Datentypen und Offset-Tabellen
- Adobe-Spezifikation für das Flash-Video-Dateiformat, Version 10.1: Definitionen der ISO-Basismedienboxen (Chunk-Offset-Box, Spurfragment-Header)
- MITRE: CWE Top 25 der gefährlichsten Softwareschwachstellen für 2025