Reporting API für IIS konfigurieren

Schritt-für-Schritt-Anleitung: Reporting-Endpoints in IIS einrichten — CSP-Violations erfassen, NEL aktivieren und mit ASP.NET Core auswerten.

IIS · Schritt für Schritt

Reporting API in IIS

Die Reporting API ermöglicht es, CSP-Violations, Deprecation Warnings und Network Error Logging automatisch an einen Endpoint zu senden. Mit 4 von 166 Punkten im Wolf-Agents Web Security Check ist Reporting der Schlüssel zur kontinuierlichen Verbesserung Ihrer Security-Header-Konfiguration.

In IIS setzen Sie den Reporting-Endpoints-Header per web.config customHeaders. Für den Report-Empfänger nutzen Sie einen ASP.NET Core Endpoint oder einen externen Dienst. Wolf-Agents bietet mit dem CSP-Violation-Monitoring eine integrierte Lösung.

Besonders wertvoll ist die Kombination mit Network Error Logging (NEL): Waehrend CSP-Reports Policy-Verstoße melden, erfasst NEL Netzwerkfehler wie DNS-Ausfaelle, TLS-Fehler und HTTP-Statuscodes — alles automatisch ohne Client-seitiges JavaScript.

1 Schritt 1 von 5

Reporting-Endpoints und CSP konfigurieren

Setzen Sie den Reporting-Endpoints-Header und verknüpfen Sie ihn mit der CSP via report-to-Direktive. Ersetzen Sie die URL durch Ihren eigenen Reporting-Endpoint. Mehrere Endpoints können kommasepariert definiert werden.

web.config Produktiv
<!-- web.config — Reporting-Endpoints + CSP -->
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <!-- Reporting-Endpoints (Reporting API v1) -->
        <add name="Reporting-Endpoints"
             value="csp-endpoint=&quot;https://ihre-domain.de/csp-report&quot;, default=&quot;https://ihre-domain.de/reports&quot;" />

        <!-- CSP mit report-to -->
        <add name="Content-Security-Policy"
             value="default-src 'self'; script-src 'self'; report-to csp-endpoint" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>
PowerShell Alternative
# PowerShell — Reporting-Endpoints setzen
$sitePath = 'MACHINE/WEBROOT/APPHOST/Default Web Site'
$filter = "system.webServer/httpProtocol/customHeaders"

# Reporting-Endpoints Header hinzufügen
Add-WebConfigurationProperty -pspath $sitePath \
  -filter $filter -name "." -value @{
    name  = 'Reporting-Endpoints'
    value = 'csp-endpoint="https://ihre-domain.de/csp-report"'
  }

# NEL-Header (optional)
Add-WebConfigurationProperty -pspath $sitePath \
  -filter $filter -name "." -value @{
    name  = 'NEL'
    value = '{"report_to":"default","max_age":604800}'
  }

Write-Host "Reporting-Endpoints konfiguriert."
2 Schritt 2 von 5

ASP.NET Core Report-Endpoint

Erstellen Sie einen Endpoint in Ihrer ASP.NET Core Anwendung, der die CSP-Reports empfaengt und loggt. Prüfen Sie den Content-Type, um nur valide Reports zu akzeptieren. In der Produktion speichern Sie die Reports in einer Datenbank oder leiten sie an ein Monitoring-System weiter.

Program.cs ASP.NET Core
// ASP.NET Core — CSP-Report-Endpoint mit Logging
// Program.cs
app.MapPost("/csp-report", async (HttpContext context) =>
{
    // Content-Type prüfen
    var contentType = context.Request.ContentType;
    if (contentType != "application/csp-report" &&
        contentType != "application/reports+json")
    {
        return Results.BadRequest();
    }

    using var reader = new StreamReader(
        context.Request.Body);
    var body = await reader.ReadToEndAsync();

    // Report loggen (Produktiv: in DB speichern)
    logger.LogWarning(
        "CSP Violation: {Report}", body);

    return Results.NoContent();
});

// CORS für Cross-Origin Reports erlauben
app.MapPost("/reports", async (HttpContext ctx) =>
{
    ctx.Response.Headers.Append(
        "Access-Control-Allow-Origin", "*");
    // Report verarbeiten...
    return Results.NoContent();
});
3 Schritt 3 von 5

Network Error Logging (NEL) aktivieren

NEL meldet automatisch Netzwerkfehler: DNS-Aufloesung, TCP-Verbindung, TLS-Handshake und HTTP-Fehler. Der max_age-Wert definiert die Gueltigkeitsdauer in Sekunden (604800 = 7 Tage). failure_fraction bestimmt den Anteil der gemeldeten Fehler.

web.config NEL
<!-- web.config — Network Error Logging (NEL) -->
<!-- Automatische Berichte bei Netzwerkfehlern -->
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <!-- Reporting-Endpoints (Pflicht für NEL) -->
        <add name="Reporting-Endpoints"
             value="default=&quot;https://ihre-domain.de/reports&quot;" />

        <!-- NEL: 7 Tage, 100% der Fehler melden -->
        <add name="NEL"
             value="{&quot;report_to&quot;:&quot;default&quot;,&quot;max_age&quot;:604800,&quot;failure_fraction&quot;:1.0}" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>
4 Schritt 4 von 5

Reports testen und verifizieren

Provozieren Sie eine CSP-Violation, um den Reporting-Flow zu testen. Laden Sie ein Script von einer nicht autorisierten Domain, um zu prüfen, ob der Report an Ihren Endpoint gesendet wird. Nutzen Sie den Wolf-Agents Web Security Check für eine automatische Prüfung.

PowerShell Verifizieren
# PowerShell — Reporting-Endpoints prüfen
curl -sI https://ihre-domain.de |
  Select-String "Reporting-Endpoints|NEL"

# Erwartete Ausgabe:
# Reporting-Endpoints: csp-endpoint="https://ihre-domain.de/csp-report"
# NEL: {"report_to":"default","max_age":604800}

# Report-Endpoint testen
$body = '{"csp-report":{"document-uri":"test"}}'
Invoke-WebRequest -Uri "https://ihre-domain.de/csp-report" \
  -Method POST \
  -ContentType "application/csp-report" \
  -Body $body
# Erwartet: HTTP 204 No Content

Häufige Fehler

report-uri vs. report-to

report-uri ist veraltet, wird aber noch von allen Browsern unterstützt. report-to ist der moderne Standard, wird aber noch nicht von Firefox unterstützt. Für maximale Abdeckung setzen Sie beide Direktiven in Ihrer CSP.

Reporting-Endpoint nicht erreichbar

Der Endpoint muss HTTPS verwenden und CORS für Cross-Origin-Reports erlauben. Stellen Sie sicher, dass Access-Control-Allow-Origin korrekt gesetzt ist, sonst werden Reports verworfen.

DSGVO bei Report-Daten

CSP-Reports können Benutzer-URLs und IP-Adressen enthalten. Beachten Sie die DSGVO-Anforderungen: Speichern Sie Reports pseudonymisiert und mit begrenzter Aufbewahrungsfrist von maximal 30 Tagen.

JSON-Escaping in web.config

Anführungszeichen in Header-Werten müssen als &quot; escaped werden. Vergessen Sie das Escaping, liefert IIS einen ungültige Header-Wert, und der Browser ignoriert den gesamten Reporting-Endpoints-Header.

Compliance-Relevanz

PCI DSS 4.0 (Anforderung 6.4.3) fordert ab März 2025 kontinuierliches Monitoring von CSP-Violations auf Zahlungsseiten. Die Reporting API liefert diese Daten automatisch. NIS2 verlangt die Erkennung von Sicherheitsvorfällen — Reporting ist der erste Schritt. Der Wolf-Agents Web Security Check bewertet die Reporting-Konfiguration mit bis zu 4 Punkten.

Wie steht Ihre Domain bei Reporting API?

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