Sicherheitsheader sind eine Teilmenge von HTTP-Antwortheadern, die von einem Webserver festgelegt werden können, die jeweils eine Sicherheitskontrolle in Browsern anwenden. HTTP-Header sind eine Form von Metadaten, die mit Webanforderungen und -antworten gesendet werden. Der Sicherheitsheader „X-Content-Type-Options“ verhindert, dass Browser MIME-Sniffing durchführen.
Hinweis: HTTP-Header sind nicht exklusiv für HTTP und werden auch in HTTPS verwendet.
Was ist MIME-Sniffing?
Wenn Daten über das Web gesendet werden, ist eines der enthaltenen Metadaten ein MIME-Typ. Multipurpose Internet Mail Extensions oder MIME-Typen sind ein Standard, der verwendet wird, um den Datentyp zu definieren, den eine Datei enthält, der angibt, wie die Datei behandelt werden soll. Normalerweise besteht der MIME-Typ aus einem Typ und einem Untertyp mit einem optionalen Parameter und Wert. Eine UTF-8-Textdatei hätte beispielsweise den MIME-Typ „text/plain;charset=UTF-8“. In diesem Beispiel ist der Typ „text“, der Untertyp ist „plain“, der Parameter ist „charset“ und der Wert ist „UTF-8“.
Um die falsche Bezeichnung und Handhabung von Dateien zu verhindern, führen Webserver normalerweise MIME-Sniffing durch. Dies ist ein Vorgang, bei dem der explizit angegebene MIME-Typ ignoriert und stattdessen der Dateianfang analysiert wird. Die meisten Dateitypen enthalten Header-Sequenzen, die angeben, um welchen Dateityp es sich handelt. Meistens sind die MIME-Typen korrekt und das Sniffen der Datei macht keinen Unterschied. Wenn es jedoch einen Unterschied gibt, verwenden Webserver den gesnifften Dateityp, um zu bestimmen, wie die Datei zu behandeln ist, und nicht den deklarierten MIME-Typ.
Das Problem tritt auf, wenn es einem Angreifer gelingt, eine Datei wie ein PNG-Bild hochzuladen, die Datei jedoch in Wirklichkeit etwas anderes wie JavaScript-Code ist. Bei ähnlichen Dateitypen, wie z. B. zwei Texttypen, kann dies kein allzu großes Problem darstellen. Ernsthaft wird es jedoch, wenn stattdessen eine vollkommen harmlose Datei ausgeführt werden kann.
Was macht X-Content-Type-Optionen?
Der X-Content-Type-Options-Header hat nur einen möglichen Wert „X-Content-Type-Options: nosniff“. Durch die Aktivierung wird der Browser des Benutzers darüber informiert, dass er kein MIME-Typ-Sniffing durchführen darf und sich stattdessen auf den explizit deklarierten Wert verlässt. Ohne diese Einstellung würde die JavaScript-Datei ausgeführt, wenn eine bösartige JavaScript-Datei als Bild wie PNG getarnt wurde. Wenn X-Content-Type-Optionen aktiviert sind, wird die Datei als Bild behandelt, das nicht geladen werden kann, da die Datei kein gültiges Bildformat hat.
X-Content-Type-Options ist auf einer Website, die ausschließlich Ressourcen von Erstanbietern verwendet, nicht unbedingt erforderlich, da keine Möglichkeit besteht, dass eine bösartige Datei versehentlich bereitgestellt wird. Wenn eine Website Inhalte von Drittanbietern wie externe oder von Benutzern eingereichte Ressourcen verwendet, bietet X-Content-Type-Options Schutz vor dieser Art von Angriff.