Contao - 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.
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.
*******************
Liebe Leser,
Menschen sind nicht ausschließlich Frauen, Männer, weiblich, männlich, divers – Menschen können vielfältiger sein! Wir möchten euch ALLE als Menschen ansprechen, egal von welchem Geschlecht oder welcher Kultur. Sprachlich ist es schwierig, euch alle „richtig“ anzusprechen. Daher verwenden wir – auch für eine bessere Lesbarkeit – bei Personenbezeichnungen meist die männliche Form, wie Dienstleister oder Partner. Aber eins ist uns wichtig: Keiner soll sich ausgeschlossen fühlen.
Zudem sind wir Verfechter des DU #gernperdu und gestalten so unsere tägliche Kommunikation etwas lockerer und persönlicher. Auch hier gilt: Wir bringen allen die gleiche Wertschätzung entgegen.
*******************