Contao - Content Security Policy (CSP)

'Mathias Arzberger'
Mathias Arzberger

Content Security Policy (CSP) ist ein HTTP-Header, der den Betreibern von Websites eine fein abgestufte Kontrolle darüber ermöglicht, von wo aus Ressourcen auf ihrer Website geladen werden können.

Contao und die Content Security Policy (CSP)

Fehler: Content Security Policy (CSP) header not implemented oder auf deutsch Content Security Policy (CSP)-Kopfzeile nicht implementiert

Warum erhalte ich diese Fehlermeldung von Mozilla Observatory?

Die Hersteller der Browser und auch die Webstandards entwickelnden Gremien sind ständig darum bemüht, Mechanismen zu finden, mit denen Angriffe auf Seitenbesucher verhindert werden können. Es geht insbesondere darum, das Unterschieben von bösartigem Code abzuwehren. Bei den sogenannten Cross-Site-Scripting-Attacken werden Daten von fremden Webservern eingebunden, die die Aufgabe haben, den Datenverkehr auf der gerade besuchten Website auszuspionieren, diesen zu manipulieren oder gar mögliche Softwarefehler auf dem Rechner des Seitenbesuchers auszunutzen, um Schadsoftware zu installieren.

Ein solcher Abwehrmechanismus ist die Content Security Policy (zu deutsch etwa „Richtlinie für die Sicherheit der Inhalte“).

 

Fehlermeldung

Test: Content Security Policy
Score: -25
Reason: Content Security Policy (CSP) header not implemented

Missing Content Security Policy header - Lösung

Content-Security-Policy: frame-ancestors 'none'; default-src 'self', script-src '*://*.example.com:*'

In diesem Beispiel bedeutet die auf "none" gesetzte frame-ancestors-Direktive, dass die Seite nicht innerhalb eines Frames platziert werden kann, nicht einmal von sich aus. Die default-src legt die Ladepolitik für alle Ressourcen fest, in diesem Fall können sie vom aktuellen Ursprung (Protokoll + Domain + Port) geladen werden. Das Beispiel legt eine spezifischere Richtlinie für Skripte fest, und zwar durch die script-src, die das Laden von Skripten auf jede Subdomain von example.com beschränkt.

Die Richtlinie kann mit verschiedenen Direktiven festgelegt werden, und es gibt weitere, weniger strenge Optionen für die oben genannten Direktiven.

Setzen des Content Security Policy header via .htaccess für Apache, nginx oder web.config auf IIS

Header set Content-Security-Policy "frame-ancestors 'none'; default-src 'self', script-src '*://*.example.com:*'"

oder

server {
  ...
  add_header Content-Security-Policy "frame-ancestors 'none'; default-src 'self', script-src '*://*.example.com:*'";
}

Setzen des Content Security Policy header via META Tag

<meta http-equiv="Content-Security-Policy" content="frame-ancestors 'none'; default-src 'self', script-src '*://*.example.com:*'">

Setzen des Content Security Policy header via PHP

<?php
header("Content-Security-Policy: frame-ancestors 'none'; default-src 'self', script-src '*://*.example.com:*'");

Setzen des Content Security Policy header via nelmio/security-bundle bzw. config.yml

# Security configuration
nelmio_security:
    csp:
        enabled: true
        hash:
            algorithm: sha256
        enforce:
            level1_fallback: false
            frame-ancestors:
                - 'none'
            img-src:
                - 'self'
            default-src:
                - 'self'
            script-src:
                - '*://*.example.com:*'

So könnte deine config.yml aussehen:

# Security configuration
nelmio_security:
  clickjacking:
    paths:
      '^/.*': ALLOW
  csp:
    enabled: true
    hash:
      algorithm: sha256
    enforce:
      default-src:
        - 'none'
      img-src:
        - 'self'
        - 'data:'
        - 'blob:'
        - 'unsafe-inline'
      script-src:
        - 'self'
        - 'data:'
        - 'blob:'
        - 'unsafe-inline'
      font-src:
        - 'self'
        - 'data:'
      style-src:
        - 'self'
        - 'data:'
        - 'unsafe-inline'

Die Konfiguration hängt natürlich stark von deinen Setup ab und welche Funktionen du einsetzt. Solltest du Hilfe benötigen, helfen wir dir gern weiter. Nutze für eine Anfrage unser Kontaktformular.

Was ist die Content Security Policy (CSP)?

Content Security Policy (CSP) ist ein HTTP-Header, der den Betreibern von Websites eine fein abgestufte Kontrolle darüber ermöglicht, von wo aus Ressourcen auf ihrer Website geladen werden können. Die Verwendung dieses Headers ist die beste Methode, um Cross-Site-Scripting (XSS)-Schwachstellen zu verhindern. Da es schwierig ist, CSP nachträglich in bestehende Websites einzubauen, ist CSP für alle neuen Websites obligatorisch und wird für alle bestehenden Websites mit hohem Risiko dringend empfohlen.

Der Hauptvorteil von CSP besteht darin, dass die Verwendung von unsicherem Inline-JavaScript unterbunden wird. Inline-JavaScript - entweder reflektiert oder gespeichert - bedeutet, dass unsachgemäß escapete Benutzereingaben Code erzeugen können, der vom Webbrowser als JavaScript interpretiert wird. Durch die Verwendung von CSP zur Deaktivierung von Inline-JavaScript können Sie fast alle XSS-Angriffe auf Ihre Website wirksam unterbinden.

Beachten Sie, dass die Deaktivierung von Inline-JavaScript bedeutet, dass sämtliches JavaScript von <script> src-Tags geladen werden muss. Event-Handler wie onclick, die direkt auf einem Tag verwendet werden, werden nicht funktionieren, ebenso wie JavaScript innerhalb von <script>-Tags, das nicht über src geladen wird. Außerdem werden Inline-Stylesheets, die entweder <style>-Tags oder das style-Attribut verwenden, ebenfalls nicht geladen. Daher muss bei der Gestaltung von Websites darauf geachtet werden, dass CSP einfacher zu implementieren ist.

Weitere Infos erhältst du über die Links Einstellmöglichkeiten und Wertangaben zu den Einstellungen des Content Security Policy Headers.

Zurück