Content-Type, Inhalt und Ladekontext auseinanderhalten
Content-Type benennt den Medientyp einer Antwort, etwa text/css. Die Dateiendung allein entscheidet nicht darüber, wie der Browser die Antwort behandelt. MIME-Sniffing bezeichnet Verfahren, die den zu verwendenden Typ aus Metadaten und gegebenenfalls aus dem Inhalt bestimmen. Welche Prüfungen greifen, hängt zusätzlich davon ab, ob die Antwort als Dokument, Skript, Stylesheet oder Bild angefordert wurde. MIME Sniffing Standard
Der Web Security Check liest den X-Content-Type-Options-Wert der finalen Antwort. Das belegt keine korrekten MIME-Typen aller Assets und keine geprüfte Uploadfunktion. Ein nosniff auf der Startseite wirkt nicht automatisch als Header ihrer separat geladenen Dateien.
nosniff mit korrekten Medientypen kombinieren
X-Content-Type-Options: nosniffDas ist der standardisierte Wert, ohne zusätzliche Parameter. Der Browser vergleicht ihn ohne Beachtung der ASCII-Groß-/Kleinschreibung. Nach dem Fetch-Standard § 3.6 wird für die Aktivierung das erste Listenelement ausgewertet. nosniff, nosniff aktiviert den Mechanismus, falsch, nosniff dagegen nicht. Solche Doppelungen sollten Sie an der Ausgabestelle bereinigen.
Für scriptartige Requests blockiert der Fetch-Algorithmus bei aktivem nosniff, wenn kein JavaScript-MIME-Typ erkannt wird. Für Stylesheets verlangt er text/css. Ein zulässiger Parameter wie charset=utf-8 ändert die MIME-Essenz nicht. Dieser Algorithmus prüft weder den Inhalt auf Schadcode noch beliebige Antworten auf einen „sicheren Dateityp“.
Bei schmaler Ansicht können Sie die Tabelle seitlich scrollen.
| Antwort und Verwendung | Ergebnis beziehungsweise Grenze |
|---|---|
JavaScript als text/plain, geladen über klassisches <script src> | Mit nosniff wegen des Typs blockiert. Ohne Header hängt das Ergebnis von weiteren Browserregeln ab. |
JavaScript als text/javascript; charset=utf-8 | Passender MIME-Typ; nosniff beweist nicht die Unbedenklichkeit des Codes. |
CSS als text/plain | Mit nosniff als Stylesheet blockiert. Auch ohne Header können Standardmodus und Browserregeln das Laden verhindern. |
JavaScript-Modul als text/plain | Module haben bereits eine strenge MIME-Prüfung; die Sperre lässt sich nicht allein nosniff zuschreiben. |
JSON über fetch(...).json() | Dieser Aufruf ist keine Skripteinbettung. nosniff validiert weder das JSON-Schema noch erzwingt es allein den JSON-Medientyp. |
Ein kleines Modell zeigt den Zusammenhang:
<script src="/uploads/beispiel.txt"></script>Content-Type: text/plain
X-Content-Type-Options: nosniffDie Antwort wird in diesem Skriptkontext zurückgewiesen. Daraus folgt nicht, dass jede Datei ohne nosniff ausführbar ist oder dass eine sichere Uploadarchitektur beliebige Dateiinhalte unter dem eigenen Anwendungs-Origin ausliefern sollte.
Auch bei Dokumentnavigation sind Browser- und Sniffingregeln zu beachten. nosniff ist weder ein allgemeines Downloadkommando noch eine Garantie, HTML immer als Text darzustellen. Wird aktiver Inhalt korrekt als text/html oder als SVG-Dokument ausgeliefert, schaltet der Header dessen Funktionen nicht pauschal aus. In der lokalen Chromium-Probe blieb text/plain Text; daraus wird keine Zusage für alle Browser und fehlende Content-Types abgeleitet.
Warum ein korrektes SVG trotzdem Skripte enthalten kann
SVG ist ein XML-basiertes Grafikformat mit je nach Verwendung unterschiedlichen Fähigkeiten. Der SVG2-Entwurf, Verarbeitungsmodi, unterscheidet unter anderem interaktive Dokumente und eingeschränkte Bildmodi.
Lokale Chromium-147-Probe · keine Uploadabnahme
Dieselbe SVG-Antwort in drei Ladekontexten
Bei schmaler Ansicht können Sie die Tabelle seitlich scrollen.
Verwendung von image/svg+xml mit nosniff | Beobachtung im lokalen Test | Bedeutung |
|---|---|---|
| Direkt im Browserfenster geöffnet | Enthaltenes synthetisches Skript lief. | Korrekter Typ und nosniff entfernen keinen aktiven Inhalt. |
In einem iframe als Dokument geladen | Skript lief ebenfalls. | Dokumenteinbettung ist kein eingeschränkter Bildmodus. |
Als <img> eingebunden | Das synthetische Skript lief nicht. | Der Bildmodus hat andere Fähigkeiten; der direkte Dateiaufruf bleibt ein eigener Prüfweg. |
Für fremde Uploads müssen Sie daher zuerst die Verwendung festlegen. Eine reine Grafik kann eine geprüfte Bereinigung oder Umwandlung in ein geeignetes Bildformat benötigen. Dateien zum Herunterladen können mit Content-Disposition: attachment ausgeliefert werden; das ist keine Inhaltsbereinigung und muss für die vorgesehenen Aufrufwege geprüft werden. Vertrauliche Daten oder aktive fremde Dokumente können eine getrennte Auslieferungs-Origin erfordern. Eine Unterdomain allein genügt nicht, wenn privilegierte Domain-Cookies oder großzügige CORS-Freigaben weiterhin Zugriff ermöglichen.
Passende Content-Types wählen
Bei schmaler Ansicht können Sie die Tabelle seitlich scrollen.
| Ressource | Übliche passende Antwort | Einordnung |
|---|---|---|
| JavaScript | text/javascript | RFC 9239 empfiehlt diesen Typ; einige ältere Typen werden von Browsern weiterhin erkannt. |
| Stylesheet | text/css | Die Datei muss tatsächlich CSS enthalten. |
| JSON | application/json | Ein korrekter Typ ersetzt keine Prüfung erwarteter Datenstrukturen. |
| HTML in UTF-8 | text/html; charset=utf-8 | Zeichencodierung und tatsächlich erzeugte Bytes müssen zusammenpassen. |
| SVG | image/svg+xml | Kein Beleg für passiven Inhalt. |
| PNG, JPEG, GIF | image/png, image/jpeg, image/gif | Nur für entsprechend geprüfte Dateiinhalte verwenden. |
application/pdf | Für eine PDF-Auslieferung; Anzeige oder Download zusätzlich festlegen. | |
| WOFF2 | font/woff2 | Schriftressource, keine JavaScript-Antwort. |
RFC 9239 aktualisiert die JavaScript-Medientypregistrierungen und ersetzt RFC 4329. Er hat text/javascript nicht erstmals erfunden. application/octet-stream kann für einen beabsichtigten generischen Download sinnvoll sein; es ist aber keine passende JavaScript- oder CSS-Antwort.
Einführung und Fehlersuche
Erfassen Sie zuerst HTML, Skripte, Module, CSS, Download- und Uploadrouten einschließlich Fehlerantworten. Besonders häufig ist ein vermeintliches MIME-Problem tatsächlich eine Loginseite oder HTML-Fehlerseite an einer Asset-URL. Korrigieren Sie diesen Auslieferungsweg, statt den falschen Inhalt als JavaScript zu etikettieren.
Setzen Sie den Header an der zuständigen Ausgabestelle auch für die betroffenen Asset-Antworten. Prüfen Sie danach in den Browser-Netzwerkdaten den endgültigen Status, Content-Type, X-Content-Type-Options und den Antwortinhalt. Cache und Service Worker können dabei einen älteren Stand liefern.
Für eigene, berechtigt prüfbare Ressourcen zeigt dieses nicht gegen die Platzhalteradresse ausgeführte Beispiel die Antworten der Weiterleitungskette:
curl -sS -L -D - -o /dev/null https://www.example.com/assets/app.jsTesten Sie eine passende Datei und gezielt einen falschen Typ in einer isolierten Testumgebung. Die eigene Seite muss mit dem richtigen Typ weiter funktionieren; der Gegenfall muss als Skript beziehungsweise Stylesheet scheitern. Für SVG gehören Direktaufruf und tatsächlich angebotene Einbettungsformen dazu.
Beim Rückweg stellen Sie die vorherige passende Asset-Konfiguration wieder her. nosniff global zu entfernen, um einen Fehler an einer Datei zu verdecken, würde auch andere Ressourcen betreffen. Müssen Sie einen Rollout zurücknehmen, dokumentieren Sie Ursache, betroffene Antworttypen und die nötige Cacheerneuerung.
Einzelbefund und Sicherheitsnachweis
Eine passende MIME-Konfiguration ist eine technische Maßnahme. nosniff belegt weder eine allgemeine gesetzliche Headerpflicht noch die vollständige Absicherung einer Zahlungs- oder Gesundheitsanwendung. Branchenspezifische Richtlinien dürfen nicht ohne ihren Geltungsbereich auf jede Website übertragen werden. Die Compliance-Übersicht ordnet solche Anforderungen ein.
Häufig gestellte Fragen
Verhindert nosniff jedes MIME-Sniffing?
Die Wirkung ist kontextabhängig. Der hier erklärte Fetch-Algorithmus blockiert unpassende Typen für scriptartige Requests und Stylesheets. Andere Sniffing- und Dokumentregeln sind damit nicht vollständig beschrieben.
Muss ich Content-Type trotz nosniff korrigieren?
Ja. Ein falscher Typ kann eigene Skripte oder Stylesheets blockieren. Ein korrekt deklarierter aktiver Inhalt bleibt umgekehrt aktiv; nosniff macht ihn nicht harmlos.
Schützt nosniff SVG-Uploads?
Es schützt nicht pauschal vor aktivem SVG-Inhalt. Die lokale Probe führte ein Skript beim Direktaufruf und im Frame aus, beim Laden als Bild dagegen nicht. Uploadprüfung und die vorgesehenen Auslieferungswege müssen deshalb gemeinsam bewertet werden.
Ist ORB dasselbe wie nosniff?
Nein. Opaque Response Blocking ist ein ergänzender Browsermechanismus für bestimmte opake Cross-Origin-Antworten. Daraus folgt weder eine Inhaltsvalidierung noch eine allgemeine XSS-Abwehr durch nosniff. Für Ressourcenfreigaben siehe auch Cross-Origin-Header.
Warum wird meine JavaScript-Datei als text/html blockiert?
Häufig liefert die URL tatsächlich eine Fehler-, Login- oder Fallbackseite. Prüfen Sie Status, Weiterleitung und Inhalt. Ein erzwungener JavaScript-Content-Type für diese HTML-Antwort behebt die eigentliche Ursache nicht.
Quellen und technischer Stand
- Fetch § 3.6
: Living Standard; Wertauswertung und kontextabhängige Blockierung. - MIME Sniffing
: Living Standard; Metadaten und Typbestimmung. - SVG2, Kapitel 2
: Verarbeitungsmodi im Spezifikationsentwurf; keine allgemeine Uploadfreigabe. - RFC 9239
: JavaScript-Medientypen.
Quellenstand: 27.09.2026. Lokale synthetische Skript-, CSS-, Modul-, Navigations- und SVG-Proben in Chromium 147.0.7727.15; keine geprüfte Uploadanwendung, keine Safari-/Firefox-Abnahme und keine Betriebskonfiguration.