Clickjacking-Schutz für IIS konfigurieren
Schritt-für-Schritt-Anleitung: X-Frame-Options und CSP frame-ancestors in IIS einrichten — DENY, SAMEORIGIN, Defense-in-Depth und Widget-Ausnahmen.
Clickjacking-Schutz in IIS
X-Frame-Options verhindert, dass Ihre Website in iframes eingebettet wird — der primäre Schutz gegen Clickjacking-Angriffe. Mit 10 von 166 Punkten im Wolf-Agents Web Security Check ist der Header schnell konfiguriert und sofort wirksam.
Für modernen Clickjacking-Schutz setzen Sie zusätzlich frame-ancestors in der Content Security Policy. Die Kombination beider Header bietet Defense-in-Depth: X-Frame-Options für ältere Browser, CSP frame-ancestors für moderne Browser mit erweiterter Flexibilitaet.
IIS bietet mit verschachtelten web.config-Dateien eine elegante Lösung für Ausnahmen: Waehrend die Hauptseite DENY verwendet, können einbettbare Widgets in einem separaten Verzeichnis spezifische Domains erlauben.
X-Frame-Options per web.config setzen
Verwenden Sie DENY für Seiten, die niemals eingebettet werden dürfen, oder SAMEORIGIN für Seiten, die nur von der eigenen Domain eingebettet werden sollen (z.B. für interne iframes oder Print-Preview-Funktionen).
<!-- web.config — X-Frame-Options -->
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- DENY = komplett verbieten -->
<add name="X-Frame-Options"
value="DENY" />
<!-- Oder: SAMEORIGIN = nur eigene Domain -->
<!-- add name="X-Frame-Options"
value="SAMEORIGIN" -->
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration> # PowerShell — X-Frame-Options setzen
$sitePath = 'MACHINE/WEBROOT/APPHOST/Default Web Site'
$filter = "system.webServer/httpProtocol/customHeaders"
# Bestehenden Header entfernen (idempotent)
Remove-WebConfigurationProperty -pspath $sitePath \
-filter $filter -name "." \
-AtElement @{name='X-Frame-Options'} \
-ErrorAction SilentlyContinue
# Header hinzufügen
Add-WebConfigurationProperty -pspath $sitePath \
-filter $filter -name "." -value @{
name = 'X-Frame-Options'
value = 'DENY'
}
Write-Host "X-Frame-Options: DENY konfiguriert." CSP frame-ancestors als Ergaenzung
CSP frame-ancestors ist der moderne Ersatz für X-Frame-Options und bietet mehr Flexibilitaet — Sie können spezifische Domains erlauben. Für maximale Kompatibilität setzen Sie beide Header gleichzeitig.
<!-- web.config — Defense in Depth: CSP frame-ancestors -->
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- Legacy-Schutz für ältere Browser -->
<add name="X-Frame-Options"
value="SAMEORIGIN" />
<!-- Moderner Schutz via CSP -->
<add name="Content-Security-Policy"
value="frame-ancestors 'self'; default-src 'self'" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration> Verzeichnisspezifische Ausnahmen für Widgets
Wenn bestimmte Seiten (z.B. einbettbare Widgets) von Partner-Domains in iframes geladen werden müssen, legen Sie eine separate web.config im Widget-Verzeichnis an. Diese überschreibt den globalen DENY-Header nur für dieses Verzeichnis.
<!-- embed/web.config — Einbettbare Widgets -->
<!-- Separate web.config für Bereiche, die eingebettet werden -->
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- Bestimmte Domains erlauben -->
<remove name="X-Frame-Options" />
<add name="Content-Security-Policy"
value="frame-ancestors 'self' https://partner.example.com" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration> Header verifizieren
Prüfen Sie den Header nach dem Deployment. IIS laedt web.config-Änderungen automatisch — ein IIS-Reset ist nicht erforderlich. Testen Sie sowohl die Hauptseite (DENY erwartet) als auch eventuelle Ausnahme-Verzeichnisse.
# PowerShell — Clickjacking-Schutz prüfen
# X-Frame-Options Header prüfen
curl -sI https://ihre-domain.de |
Select-String "X-Frame-Options|frame-ancestors"
# Erwartet: X-Frame-Options: DENY
# Embed-Bereich prüfen (falls konfiguriert)
curl -sI https://ihre-domain.de/embed/widget |
Select-String "X-Frame-Options|frame-ancestors"
# Erwartet: Content-Security-Policy: frame-ancestors 'self' https://...
# Clickjacking-Test im Browser:
# <iframe src="https://ihre-domain.de"></iframe>
# → Muss blockiert werden (Console-Fehler) Häufige Fehler
ALLOW-FROM ist veraltet
ALLOW-FROM wird von modernen Browsern nicht mehr unterstützt. Verwenden Sie stattdessen CSP frame-ancestors für domainspezifische Freigaben. Chrome und Firefox ignorieren ALLOW-FROM komplett.
Doppelter X-Frame-Options Header
Wenn ASP.NET Core und web.config beide X-Frame-Options setzen, wird der Header doppelt gesendet. Browser verwerfen den Request bei widerspruechlichen Werten. Verwenden Sie nur eine Quelle für den Header.
Eigene iframes blockiert
DENY blockiert auch eigene iframes. Wenn Ihre Anwendung interne iframes nutzt (z.B. Print-Preview, PDF-Viewer), verwenden Sie SAMEORIGIN statt DENY oder nutzen Sie eine verzeichnisspezifische web.config.
frame-ancestors und X-Frame-Options widersprechen sich
Wenn CSP frame-ancestors 'self' und X-Frame-Options DENY gleichzeitig gesetzt sind, verwendet der Browser CSP. Stellen Sie sicher, dass beide Header konsistente Werte haben.
Compliance-Relevanz
Clickjacking ist ein in OWASP Top 10 gelistetes Risiko. PCI DSS 4.0 fordert den Schutz von Zahlungsseiten gegen UI-Redress-Angriffe. NIS2 verlangt angemessene technische Schutzmaßnahmen — X-Frame-Options und CSP frame-ancestors sind die Standardlösung. Der Wolf-Agents Web Security Check bewertet Clickjacking-Schutz mit bis zu 10 Punkten.
Wie steht Ihre Domain bei X-Frame-Options?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.