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.

IIS · Schritt für Schritt

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.

1 Schritt 1 von 5

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 Produktiv
<!-- 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 Automatisierung
# 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."
2 Schritt 2 von 5

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 API-Ausnahme
<!-- 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>
3 Schritt 3 von 5

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.

login/web.config OAuth-kompatibel
<!-- 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>
4 Schritt 4 von 5

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 / Browser Verifizieren
# 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.