Home » Security Headers » Content-Security-Policy

Content-Security-Policy


Content Security Policy Inhaltssicherheitsrichtlinie generieren

Content-Security-Policy (CSP) Inhaltssicherheitsrichtlinie

Wie richte ich eine Inhaltssicherheitsrichtlinie (CSP) in 3 Schritten ein:

Die Content Security Policy (CSP) ist ein von Mozilla entwickelter Sicherheitsmechanismus, der im letzten Jahr erheblich an Popularität gewonnen hat.

Dieser Mechanismus fungiert als Whitelist und hat zum Zweck, festzulegen, wie der Browser Ressourcen wie Skripte, Schriftarten, Bilder, CSS, Medien, Applets usw. lädt.

CSP wird derzeit als sehr effektiver Schutz vor Cross-Site-Scripting-Angriffen (XSS) gehandelt. Bei korrekter Implementierung schränkt die Content Security Policy die Verwendung von Inline-JavaScript, DOM-Ereignisattributen wie onload und onclick, sowie von Anker-Tags, die mit dem „javascript://“ URL-Schema beginnen, ein. Auch die Verwendung von eval() wird eingeschränkt. Die CSP schreibt vor, dass Skripte nur von einer vordefinierten URL geladen werden dürfen.

Praktische Anwendung

Wenn Sie als Webseitenbetreiber eine Internet-Security-Policy einführen möchten, reicht es nicht, den modifizierten Header einzufügen. Sie müssen auch den Quellcode Ihrer Website überprüfen und anpassen.

Web-Entwickler sollten alle Skripte in separate Dateien auslagern und nicht direkt im Quellcode der Website einbetten. CSP arbeitet nach dem Prinzip einer Whitelist, die die zugelassenen Quellen für Skripte und Daten festlegt. Jegliches fremde Skript, das in den Code eingeschleust wurde, wird so zuverlässig vom Browser des Nutzers blockiert.

Gleichgewicht zwischen Sicherheit und Funktionalität

Eine Content Security Policy (CSP) kann etwas knifflig sein, um sie korrekt zu implementieren, insbesondere auf einer komplexen Website, die Ressourcen aus verschiedenen Quellen verwendet. Der Schlüssel liegt darin, ein Gleichgewicht zwischen Sicherheit und Funktionalität zu finden.

Denken Sie daran, dass Sie Ihre Website jedes Mal gründlich testen müssen, wenn Sie Ihre Richtlinie ändern, um sicherzustellen, dass sie wie erwartet funktioniert. Achten Sie besonders auf Drittanbieter-Plugins oder Skripte, die Ausnahmen in Ihrer Richtlinie erfordern könnten.

HTTP-Header-Code vs. meta http-equiv:

Die empfohlene Methode zur Aktivierung der Content Security Policy (CSP) erfolgt über den HTTP-Header, z. B.:

Content-Security-Policy: default-src 'self'

Sie kann auch mithilfe eines HTML <meta>-Elements aktiviert werden:

HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">

Warum der Header-Code bevorzugt wird:

Die Verwendung des Content-Security-Policy-Headers bietet in der Regel eine sicherere Möglichkeit zur Implementierung von CSP, da er auf Serverebene konfiguriert wird und die Einstellungen für die gesamte Website gelten kann.

Die Verwendung des META-Tags hingegen ist weniger sicher, da er auf Seitenebene festgelegt wird und durch mutmaßliche Änderungen möglicherweise manipuliert werden kann. Es wird empfohlen, den Header-Code zu verwenden, um eine umfassendere und zuverlässigere CSP-Konfiguration sicherzustellen.

1. Lockerere Richtlinie:

Sie können mit einer lockeren Richtlinie beginnen und sie nach und nach verschärfen, während Sie deren Auswirkungen auf Ihre Website verstehen. Zum Beispiel:

PHP
header("Content-Security-Policy: default-src * 'unsafe-inline' 'unsafe-eval';");

Diese Richtlinie erlaubt Inhalte aus jeder Quelle, einschließlich Inline-Skripten und Inline-Styles, ist jedoch nicht besonders sicher. Die Idee ist, nach und nach Berechtigungen zu entfernen und jedes Mal zu testen, ob die Website immer noch funktioniert.

2. Nur-Melden-Modus (Report-Only):

Um herauszufinden, welche Ressourcen das Problem verursachen, ohne Ihre Website zu beeinträchtigen, können Sie CSP im „Nur-Melden“-Modus verwenden. Dies protokolliert Verstöße, ohne tatsächlich etwas zu blockieren:

PHP
header("Content-Security-Policy-Report-Only: default-src 'self'; script-src https://domain.com");

3. Feinsteuerung:

Wenn Sie feststellen, dass nur bestimmte Arten von Inhalten problematisch sind, können Sie verschiedene Richtlinien für verschiedene Arten von Ressourcen (Skript, Bild, Schriftart usw.) festlegen.

PHP
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://domain.com https://another-script-source.com; img-src 'self' https://img-source.com");

4. Inline-Nonce:

Wenn Sie inline <script> oder <style>
-Tags haben, die blockiert werden, können Sie einen einmaligen Wert nonce (number only used once) ’nonce-rAnd0m‘ generieren und sowohl in den CSP-Header als auch in das Inline-Skript/-Style-Element einfügen, um diese zu erlauben.

PHP
header("Content-Security-Policy: default-src 'self'; script-src 'self' https:$nonce = base64_encode(random_bytes(16));
    function add_csp_header() {
        global $nonce;
        header("Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-$nonce'");
    }
add_action('send_headers', 'add_csp_header');

Dann in Ihrem Inline-HTML-Skript:

HTML
<script nonce="<?php echo $nonce; ?>"> /* Ihr Inline-Skript hier */ </script>

Erweiterte Einstellungen zur Content-Security-Policy

Über die Content-Security-Policy können Webmaster viele wichtige Einstellungen vornehmen, wie z.B. durch diese Direktiven:

  • base-uri: Beschränkt die URLs, die im <base>-Element der Webpage auftauchen dürfen
  • child-src: Legt fest, aus welchen Quellen Daten in Frames auftauchen dürfen, z. B. bei eingebetteten Videos von Drittanbietern.
  • connect-src: Beschränkt die Quellen, mit denen sich die Seite verbinden kann, z. B. über Links.
  • font-src: Bestimmt die Quellen, aus denen Schriftarten geladen werden dürfen.
  • form-action: Stellt eine Liste von gültigen Endpunkten in Formularen bereit.
  • frame-ancestors: Legt fest, welche Domains die Seite in Frames und iFrames einbauen dürfen.
  • img-src: Beschränkt die Quellen, aus denen Bilder geladen werden dürfen.
  • media-src: Legt fest, aus welchen Quellen Audio- und Video-Formate geladen werden dürfen.
  • object-src: Definiert die Kontrolle über Flash und andere Plug-ins.
  • plugin-types: Limitiert die Arten von Plug-ins.
  • report-uri: Spezifiziert eine URL, an die Berichte geschickt werden, wenn gegen die Sicherheitsmaßnahmen verstoßen wurde.
  • script-src: Bestimmt, welche Quellen für JavaScript erlaubt sind.
  • style-src: Funktioniert wie script-src, wird allerdings bei Stylesheets angewendet.
  • upgrade-insecure-requests: Legt fest, dass unsichere Seiten mit HTTP wie HTTPS-Seiten behandelt werden.
  • sandbox: Verschiebt die betreffende Seite in eine Sandbox, in der u. a. Formulare, Pop-ups und Skripte verboten sind.

Diese Direktiven gelten nur, wenn sie ausdrücklich gesetzt sind. Ansonsten stehen sie standardmäßig offen und stellen somit eine Sicherheitslücke dar.

Quellen lassen sich als Adressen, in ihrer Art oder auch als Wildcards eingeben. Folgende Eingaben sind zulässig:

  • script-src https://example.com:443 – Skripte sind nur von dieser Domain per HTTPS zulässig.
  • script-src ’none‘ – Skripte dürfen nicht geladen werden.
  • script-src ’self‘ – Skripte dürfen aus demselben Ursprung wie die aktuelle Seite geladen werden, nicht aber von Subdomains.
  • script-src https: – Skripte dürfen von jeglicher Domain geladen werden, solange sie mit HTTPS beginnt.
  • script-src example.com – Skripte dürfen von dieser Domain geladen werden.
  • script-src *.example.com – Skripte von dieser Domain und von allen Subdomains sind zulässig.
  • img-src data: – Bilder dürfen über Data-URLs geladen werden.
Google 360 für Ihre Website. Mit Sicherheit.

360° Website SecurityWebsite-Check

Ein einfacher Prozess, der Ihnen hilft:

  • Die Datenschutzerklärung 100% abmahnsicher verfassen.
  • Sicherstellen, dass nur notwendige Cookies verwendet werden.
  • Überprüfen, ob notwendige Sicherheitsbestimmungen konform sind.
  • Für einen sorgenfreien Internet-Auftritt Ihres Unternehmens.

Geben Sie Ihre Website-URL und E-Mail ein. Sie erhalten den detaillierten Prüfbericht, in dem alle Fehler und die entsprechenden Korrekturen ausführlich beschrieben werden, via E-Mail. Der Audit ist kostenlos, aber nicht umsonst!

Ihre Daten werden ausschließlich zur Kontaktaufnahme im Rahmen unserer Datenschutzerklärung verarbeitet.