X-Content-Type-Options für IIS konfigurieren

Schritt-für-Schritt-Anleitung: MIME-Sniffing in IIS verhindern — nosniff Header, korrekte staticContent-Konfiguration und PowerShell-Automatisierung.

IIS · Schritt für Schritt

X-Content-Type-Options in IIS

X-Content-Type-Options: nosniff verhindert, dass Browser den MIME-Type von Ressourcen erraten (Content-Type-Sniffing). Mit 10 von 166 Punkten im Wolf-Agents Web Security Check ist der Header einfach zu setzen und verhindert MIME-Confusion-Attacken.

IIS hat eine Besonderheit: staticContent in der web.config definiert, welche MIME-Types für Dateiendungen gesendet werden. Wenn eine Dateiendung nicht registriert ist, sendet IIS den Typ application/octet-stream — was Browser zum Sniffing verleitet. Daher ist die Kombination aus nosniff-Header und korrekter MIME-Type-Konfiguration entscheidend.

Besonders moderne Dateiformate wie .woff2, .webp, .avif und .webmanifest sind in älteren IIS-Versionen nicht registriert. Ohne korrekte MIME-Types blockiert der Browser diese Ressourcen bei aktivem nosniff.

1 Schritt 1 von 5

nosniff Header und MIME-Types konfigurieren

Setzen Sie den nosniff-Header und stellen Sie gleichzeitig sicher, dass alle Dateiendungen korrekte MIME-Types haben. Die remove-Elemente vor jedem mimeMap vermeiden Duplikate bei mehrfachem Deployment.

web.config Produktiv
<!-- web.config — X-Content-Type-Options + MIME-Types -->
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Content-Type-Options"
             value="nosniff" />
      </customHeaders>
    </httpProtocol>

    <!-- Korrekte MIME-Types sicherstellen -->
    <staticContent>
      <remove fileExtension=".js" />
      <mimeMap fileExtension=".js"
               mimeType="text/javascript" />
      <remove fileExtension=".json" />
      <mimeMap fileExtension=".json"
               mimeType="application/json" />
      <remove fileExtension=".svg" />
      <mimeMap fileExtension=".svg"
               mimeType="image/svg+xml" />
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".woff2"
               mimeType="font/woff2" />
      <remove fileExtension=".webp" />
      <mimeMap fileExtension=".webp"
               mimeType="image/webp" />
      <remove fileExtension=".avif" />
      <mimeMap fileExtension=".avif"
               mimeType="image/avif" />
      <remove fileExtension=".webmanifest" />
      <mimeMap fileExtension=".webmanifest"
               mimeType="application/manifest+json" />
    </staticContent>
  </system.webServer>
</configuration>
2 Schritt 2 von 5

PowerShell-Automatisierung

Für automatisierte Deployments oder Windows Server Core nutzen Sie PowerShell. Das Script setzt den Header, entfernt bestehende MIME-Type-Eintraege (falls vorhanden) und fuegt die korrekten Eintraege hinzu — idempotent und sicher für wiederholte Ausführung.

PowerShell Automatisierung
# PowerShell — X-Content-Type-Options + MIME-Types
$sitePath = 'MACHINE/WEBROOT/APPHOST/Default Web Site'

# nosniff Header setzen
Add-WebConfigurationProperty -pspath $sitePath \
  -filter "system.webServer/httpProtocol/customHeaders" \
  -name "." -value @{
    name  = 'X-Content-Type-Options'
    value = 'nosniff'
  }

# Moderne MIME-Types registrieren
$mimeTypes = @(
  @{ext='.woff2';  type='font/woff2'},
  @{ext='.webp';   type='image/webp'},
  @{ext='.avif';   type='image/avif'},
  @{ext='.webmanifest'; type='application/manifest+json'}
)

foreach ($m in $mimeTypes) {
  # Bestehenden Eintrag entfernen (falls vorhanden)
  Remove-WebConfigurationProperty -pspath $sitePath \
    -filter "system.webServer/staticContent" \
    -name "." -AtElement @{
      fileExtension = $m.ext
    } -ErrorAction SilentlyContinue

  # Neuen Eintrag hinzufügen
  Add-WebConfigurationProperty -pspath $sitePath \
    -filter "system.webServer/staticContent" \
    -name "." -value @{
      fileExtension = $m.ext
      mimeType = $m.type
    }
}

Write-Host "MIME-Types und nosniff konfiguriert."
3 Schritt 3 von 5

IIS Manager GUI-Konfiguration

Alternativ können Sie Header und MIME-Types über den IIS Manager konfigurieren. Diese Methode ist ideal für Administratoren, die eine grafische Oberflaeche bevorzugen, oder für Shared-Hosting-Umgebungen ohne PowerShell-Zugriff.

IIS Manager GUI
# IIS Manager GUI — Schritt-für-Schritt
#
# 1. IIS Manager öffnen (inetmgr)
# 2. Website auswaehlen
# 3. "HTTP Response Headers" doppelklicken
# 4. Rechtsklick → "Add..." klicken
#    Name:  X-Content-Type-Options
#    Value: nosniff
# 5. OK klicken
#
# MIME-Types hinzufügen:
# 1. Website auswaehlen
# 2. "MIME Types" doppelklicken
# 3. Rechtsklick → "Add..." klicken
#    Extension: .woff2
#    MIME type: font/woff2
# 4. OK klicken
4 Schritt 4 von 5

Header und MIME-Types verifizieren

Prüfen Sie den Header und MIME-Types für verschiedene Dateitypen. Besonders wichtig: JavaScript-Dateien müssen text/javascript verwenden (nicht application/x-javascript), und Fonts müssen den korrekten font/-MIME-Type haben.

PowerShell Verifizieren
# PowerShell — Header und MIME-Types prüfen

# nosniff Header prüfen
curl -sI https://ihre-domain.de |
  Select-String "X-Content-Type-Options"
# Erwartet: X-Content-Type-Options: nosniff

# JS-Datei: Content-Type muss text/javascript sein
curl -sI https://ihre-domain.de/js/app.js |
  Select-String "Content-Type"
# Erwartet: Content-Type: text/javascript

# Font-Datei: Content-Type muss font/woff2 sein
curl -sI https://ihre-domain.de/fonts/inter.woff2 |
  Select-String "Content-Type"
# Erwartet: Content-Type: font/woff2

# WebP-Bild: Content-Type muss image/webp sein
curl -sI https://ihre-domain.de/images/hero.webp |
  Select-String "Content-Type"
# Erwartet: Content-Type: image/webp

Häufige Fehler

Fehlende MIME-Types blockieren Ressourcen

IIS kennt nicht alle modernen Dateitypen (.woff2, .webp, .avif). Ohne registrierten MIME-Type sendet IIS application/octet-stream — Browser blockieren die Ressource bei aktivem nosniff.

Duplikate in staticContent

Ohne remove vor jedem mimeMap kann IIS bei mehrfachem Deployment Duplikate melden und mit HTTP 500 antworten. Verwenden Sie immer die remove/add-Kombination für idempotentes Deployment.

application/x-javascript statt text/javascript

Aeltere IIS-Versionen verwenden den veralteten MIME-Type application/x-javascript. Moderne Browser erwarten text/javascript bei aktivem nosniff und blockieren Scripts mit falschem Typ.

applicationHost.config überschreibt web.config

MIME-Types auf Server-Ebene (applicationHost.config) haben Vorrang vor der web.config. Wenn ein MIME-Type auf Server-Ebene falsch registriert ist, hilft die web.config-Korrektur nicht. Prüfen Sie die Server-Konfiguration.

Compliance-Relevanz

X-Content-Type-Options: nosniff ist eine Grundanforderung für NIS2-konforme Webauftritte. MIME-Sniffing kann zu Script-Injection führen — ein Risiko, das PCI DSS 4.0 und OWASP adressieren. Der Wolf-Agents Web Security Check bewertet diesen Header mit bis zu 10 Punkten.

Wie steht Ihre Domain bei X-Content-Type-Options?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.