Cross-Origin Headers für IIS konfigurieren
Schritt-für-Schritt-Anleitung: CORP, COEP und COOP in IIS einrichten — Cross-Origin Isolation gegen Spectre, API-Ausnahmen und OAuth-Kompatibilität.
Cross-Origin Headers in IIS
Cross-Origin Headers (CORP, COEP, COOP) schützen gegen Spectre-Angriffe und Cross-Origin-Datendiebstahl. Mit 30 von 166 Punkten im Wolf-Agents Web Security Check sind sie ein gewichtiger Faktor. Die drei Header arbeiten zusammen, um Cross-Origin Isolation zu aktivieren.
In IIS setzen Sie alle drei Header per web.config customHeaders. Beachten Sie: COEP mit require-corp blockiert alle Cross-Origin-Ressourcen ohne CORP-Header. credentialless ist die kompatiblere Alternative, die Credentials für Cross-Origin-Requests weglässt, ohne Ressourcen zu blockieren.
IIS bietet einen entscheidenden Vorteil: Die hierarchische web.config-Verarbeitung erlaubt verschiedene Konfigurationen für verschiedene Verzeichnisse. So können Sie die Hauptseite isolieren, während Ihre API Cross-Origin-Zugriffe erlaubt.
CORP, COEP und COOP per web.config setzen
Setzen Sie alle drei Cross-Origin Headers in einem Schritt. Die Kombination aus same-origin für CORP und COOP mit credentialless für COEP bietet den besten Kompromiss zwischen Sicherheit und Kompatibilität.
<!-- web.config — Cross-Origin Headers -->
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- Cross-Origin-Resource-Policy -->
<add name="Cross-Origin-Resource-Policy"
value="same-origin" />
<!-- Cross-Origin-Opener-Policy -->
<add name="Cross-Origin-Opener-Policy"
value="same-origin" />
<!-- Cross-Origin-Embedder-Policy -->
<!-- credentialless: bessere Kompatibilität -->
<add name="Cross-Origin-Embedder-Policy"
value="credentialless" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration> # PowerShell — Cross-Origin Headers setzen
$sitePath = 'MACHINE/WEBROOT/APPHOST/Default Web Site'
$filter = "system.webServer/httpProtocol/customHeaders"
$headers = @(
@{name='Cross-Origin-Resource-Policy';
value='same-origin'},
@{name='Cross-Origin-Opener-Policy';
value='same-origin'},
@{name='Cross-Origin-Embedder-Policy';
value='credentialless'}
)
foreach ($h in $headers) {
# Bestehenden Header entfernen (idempotent)
Remove-WebConfigurationProperty -pspath $sitePath \
-filter $filter -name "." \
-AtElement @{name=$h.name} \
-ErrorAction SilentlyContinue
# Header hinzufügen
Add-WebConfigurationProperty -pspath $sitePath \
-filter $filter -name "." -value $h
}
Write-Host "Cross-Origin Headers konfiguriert." API-Verzeichnis mit eigener web.config
Wenn Ihre API Cross-Origin-Zugriffe erlauben muss (z.B. für ein SPA auf einer anderen Subdomain), legen Sie eine separate web.config im API-Verzeichnis an. IIS verarbeitet web.config-Dateien hierarchisch — die Kind-Konfiguration überschreibt die Eltern-Konfiguration.
<!-- api/web.config — Cross-Origin für APIs -->
<!-- Separate web.config im API-Verzeichnis -->
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- API: Cross-Origin erlauben -->
<add name="Cross-Origin-Resource-Policy"
value="cross-origin" />
<!-- CORS Header für SPA-Zugriff -->
<add name="Access-Control-Allow-Origin"
value="https://app.ihre-domain.de" />
<add name="Access-Control-Allow-Methods"
value="GET, POST, PUT, DELETE" />
<add name="Access-Control-Allow-Headers"
value="Content-Type, Authorization" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration> COOP für OAuth- und Payment-Flows
COOP same-origin isoliert Fenster vollständig — OAuth-Popups und window.opener werden blockiert. Für Seiten mit OAuth-Login (Google, Microsoft, GitHub) oder Payment-Popups (Stripe, PayPal) verwenden Sie same-origin-allow-popups. Legen Sie eine separate web.config im Login-Verzeichnis an.
<!-- web.config — COOP für OAuth/Payment-Popups -->
<!-- Nur auf Seiten mit OAuth-Login oder Payment -->
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- Popups erlauben, sonst same-origin -->
<add name="Cross-Origin-Opener-Policy"
value="same-origin-allow-popups" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration> Cross-Origin Isolation verifizieren
Prüfen Sie, ob Cross-Origin Isolation aktiv ist. Im Browser können Sie self.crossOriginIsolated in der Konsole abfragen. Bei true sind APIs wie SharedArrayBuffer und hochaufloesende Timer verfügbar.
# PowerShell — Cross-Origin Headers prüfen
curl -sI https://ihre-domain.de |
Select-String "Cross-Origin"
# Erwartete Ausgabe:
# Cross-Origin-Resource-Policy: same-origin
# Cross-Origin-Opener-Policy: same-origin
# Cross-Origin-Embedder-Policy: credentialless
# API-Verzeichnis prüfen (cross-origin erwartet)
curl -sI https://ihre-domain.de/api/status |
Select-String "Cross-Origin-Resource-Policy"
# Erwartet: Cross-Origin-Resource-Policy: cross-origin
# Im Browser (F12 → Console):
# self.crossOriginIsolated → true Häufige Fehler
Drittanbieter-Ressourcen blockiert
COEP mit require-corp blockiert alle Ressourcen ohne CORP-Header (Google Fonts, CDN-Scripts, Analytics). Verwenden Sie credentialless oder setzen Sie crossorigin-Attribute auf externe Ressourcen.
OAuth-Popups funktionieren nicht
COOP same-origin isoliert Fenster. OAuth-Popups und window.opener werden blockiert. Verwenden Sie same-origin-allow-popups für Seiten mit OAuth-Flows oder Payment-Integrationen.
Application Pool überschreibt Header
Header in der Root-web.config gelten für alle Application Pools. Verschiedene Anwendungen brauchen möglicherweise verschiedene CORP-Werte. Nutzen Sie die hierarchische web.config-Verarbeitung für verzeichnisspezifische Konfiguration.
credentialless nur in Chromium
COEP credentialless wird nur von Chromium-basierten Browsern unterstützt. Firefox verwendet require-corp. Prüfen Sie Ihre Zielgruppe und wählen Sie den passenden Wert oder setzen Sie beide als Fallback.
Compliance-Relevanz
Cross-Origin Isolation schützt gegen Spectre-Seitenkanalangriffe — ein Bedrohungsszenario, das NIS2 unter technische Cybersicherheitsmaßnahmen fasst. PCI DSS 4.0 fordert Schutz gegen bekannte Angriffsvektoren. Der Wolf-Agents Web Security Check bewertet Cross-Origin Headers mit bis zu 30 Punkten.
Wie steht Ihre Domain bei Cross-Origin Headers?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.