X-Content-Type-Options für AWS CloudFront
MIME-Sniffing per Response Headers Policy verhindern — ein Klick im Dashboard oder eine Zeile Terraform. Inklusive S3 Content-Type-Best-Practices.
X-Content-Type-Options auf AWS CloudFront
X-Content-Type-Options: nosniff verhindert, dass Browser den MIME-Type von Ressourcen erraten (MIME-Sniffing). Ohne diesen Header können Angreifer harmlose Dateien als ausführbare Scripts interpretieren lassen — etwa eine Text-Datei als JavaScript. X-Content-Type-Options ist mit 10 von 166 Punkten ein relevanter Faktor im Wolf-Agents Web Security Check.
CloudFront bietet einen dedizierten content_type_options-Block in der Response Headers Policy. Es gibt nur einen gültigen Wert: nosniff. Die AWS-Managed SecurityHeadersPolicy setzt diesen Header bereits — aber nur wenn Sie die Managed Policy auch aktiv der Distribution zuweisen. Bei einer Custom Policy müssen Sie den Block explizit aktivieren.
Wichtig: Wenn nosniff aktiv ist, verlässt sich der Browser ausschließlich auf den Content-Type-Header. Stellen Sie sicher, dass alle S3-Objekte den korrekten MIME-Type haben — andernfalls werden CSS-Dateien nicht als Stylesheets und JS-Dateien nicht als Scripts erkannt.
X-Content-Type-Options per Terraform aktivieren
Aktivieren Sie den content_type_options-Block in der Response Headers Policy. CloudFront setzt automatisch den Wert nosniff — es gibt keinen anderen gültigen Wert. Mit override = true wird der Header auch dann gesetzt, wenn der Origin bereits einen eigenen X-Content-Type-Options-Header sendet.
# terraform/x-content-type-options.tf
resource "aws_cloudfront_response_headers_policy" "xcto" {
name = "xcto-policy"
security_headers_config {
content_type_options {
override = true
}
# CloudFront setzt automatisch: X-Content-Type-Options: nosniff
# Es gibt nur diesen einen gültigen Wert.
}
}
# Distribution mit XCTO Policy
resource "aws_cloudfront_distribution" "main" {
default_cache_behavior {
response_headers_policy_id = aws_cloudfront_response_headers_policy.xcto.id
}
} Konfiguration über die AWS Console
Im CloudFront Dashboard ist X-Content-Type-Options ein einfacher Toggle unter Security Headers. Die Managed SecurityHeadersPolicy setzt den Header ebenfalls, bietet aber keine Konfiguration für CSP, Cross-Origin Headers und andere wichtige Header — eine Custom Policy ist daher in den meisten Fällen die bessere Wahl.
# AWS Console — Schritt für Schritt:
# 1. CloudFront → Distributions → [ID] → Behaviors → Edit
# 2. Response Headers Policy → Create/Edit Custom Policy
# 3. Security Headers → X-Content-Type-Options:
# - Enabled: Yes
# - Override Origin: Yes
# 4. Save Changes
# Der Wert "nosniff" wird automatisch gesetzt.
#
# Alternative: Managed Policy verwenden
# Die AWS-Managed "SecurityHeadersPolicy" setzt nosniff bereits.
# Aber sie fehlt CSP, Cross-Origin Headers und andere Header. S3-Objekte mit korrektem Content-Type hochladen
Mit nosniff aktiv verlässt sich der Browser auf den Content-Type-Header. Stellen Sie sicher, dass alle S3-Objekte den korrekten MIME-Type haben. Die AWS CLI erkennt gängige Dateitypen automatisch, aber prüfen Sie trotzdem — besonders bei SVG, WebP und anderen weniger gängigen Formaten.
# S3-Objekte mit korrektem Content-Type hochladen
aws s3 cp dist/ s3://ihr-bucket/ --recursive \
--exclude "*" \
--include "*.html" --content-type "text/html; charset=utf-8"
aws s3 cp dist/ s3://ihr-bucket/ --recursive \
--exclude "*" \
--include "*.css" --content-type "text/css"
aws s3 cp dist/ s3://ihr-bucket/ --recursive \
--exclude "*" \
--include "*.js" --content-type "text/javascript"
aws s3 cp dist/ s3://ihr-bucket/ --recursive \
--exclude "*" \
--include "*.json" --content-type "application/json"
aws s3 cp dist/ s3://ihr-bucket/ --recursive \
--exclude "*" \
--include "*.svg" --content-type "image/svg+xml"
# Tipp: aws s3 sync erkennt Content-Types automatisch
# für gängige Dateitypen — prüfen Sie trotzdem! Verifizierung
Prüfen Sie den nosniff-Header und die Content-Types aller Ressourcen per curl. Öffnen Sie die Seite in den Browser DevTools und prüfen Sie im Network-Tab, ob alle Ressourcen den korrekten Content-Type haben. Der Wolf-Agents Web Security Check prüft X-Content-Type-Options automatisch.
# X-Content-Type-Options prüfen
curl -sI https://ihre-domain.de | grep -i x-content-type-options
# Erwartete Ausgabe:
x-content-type-options: nosniff
# Content-Type von S3-Objekten prüfen
curl -sI https://ihre-domain.de/style.css | grep -i content-type
# Erwartete Ausgabe:
content-type: text/css
# JavaScript Content-Type prüfen
curl -sI https://ihre-domain.de/app.js | grep -i content-type
# Erwartete Ausgabe:
content-type: text/javascript Häufige Fehler
S3-Objekte ohne Content-Type
Wenn S3-Objekte keinen korrekten Content-Type haben und nosniff aktiv ist, werden CSS- und JS-Dateien vom Browser blockiert. Setzen Sie Content-Type beim Upload: aws s3 cp style.css s3://bucket/ --content-type text/css.
Doppelter Header durch Origin und Policy
Wenn der Origin bereits nosniff setzt und die Policy ebenfalls, wird der Header doppelt gesendet. Setzen Sie override = true, damit CloudFront den Origin-Header überschreibt statt zu ergänzen.
Content-Type application/octet-stream
S3 setzt standardmäßig application/octet-stream für unbekannte Dateitypen. Mit nosniff wird dieser Type exakt verwendet — Dateien werden heruntergeladen statt angezeigt. Setzen Sie explizite Content-Types für alle Dateitypen.
SVG-Dateien als application/octet-stream
SVG-Dateien müssen den Content-Type image/svg+xml haben. Ohne korrekten Type werden SVGs mit nosniff nicht als Bilder dargestellt. Achten Sie besonders bei SVG, WOFF2 und WebP auf korrekte MIME-Types.
Compliance-Relevanz
OWASP Top 10 empfiehlt nosniff als Basismaßnahme gegen MIME-Type-Confusion-Angriffe, bei denen harmlose Dateien als ausführbare Scripts interpretiert werden. PCI DSS fordert Schutz vor bekannten Angriffsvektoren — MIME-Sniffing ist ein bekannter Vektor. BSI IT-Grundschutz listet X-Content-Type-Options als empfohlenen Security Header in den Maßnahmenkatalogen. NIS2 erfordert technische Sicherheitsmaßnahmen auf dem Stand der Technik. Der Wolf-Agents Web Security Check prüft den Header automatisch bei jedem Scan.
Wie steht Ihre Domain bei X-Content-Type-Options?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.