Diese Anleitung erklärt, wie Sie Content Security Policy (CSP) verwenden, um Cross-Site-Scripting-Angriffe (XSS) in Discourse zu mindern. Sie behandelt die Grundlagen von CSP, die Konfiguration und bewährte Verfahren.
Erforderliche Benutzerstufe: Administrator
Zusammenfassung
Content Security Policy (CSP) ist ein entscheidendes Sicherheitsfeature in Discourse, das zum Schutz vor Cross-Site-Scripting (XSS) und anderen Injektionsangriffen beiträgt. Diese Anleitung behandelt die Grundlagen von CSP, deren Umsetzung in Discourse und die Konfiguration für Ihre Seite.
Was ist Content Security Policy?
Content Security Policy ist eine zusätzliche Sicherheitsebene, die hilft, bestimmte Angriffsarten zu erkennen und zu mindern, darunter Cross-Site-Scripting (XSS) und Dateninjektionsangriffe. CSP funktioniert, indem festgelegt wird, welche Inhaltsquellen als vertrauenswürdig gelten, und der Browser angewiesen wird, Ressourcen nur von diesen vertrauenswürdigen Quellen auszuführen oder darzustellen.
XSS bleibt eine der häufigsten Schwachstellen im Web. Durch die Implementierung von CSP erlaubt Discourse das Laden und Ausführen von Skripten nur aus vertrauenswürdigen Quellen, was das Risiko von XSS-Angriffen erheblich verringert.
CSP-Implementierung in Discourse
Ab Discourse-Version 3.3.0.beta1 implementiert Discourse eine CSP mit „strict-dynamic". Dieser Ansatz verwendet einen einzigen nonce--Wert und das Schlüsselwort strict-dynamic in der Direktive script-src. Alle initialen <script>-Tags im Kern und in Themes erhalten automatisch das entsprechende Attribut nonce=.
Die Standardrichtlinie umfasst folgende Direktiven:
script-src: Legt gültige Quellen für JavaScripts festworker-src: Legt gültige Quellen für ServiceWorker-Skripte festobject-src: Blockiert die Ausführung von Plugins (Flash, Java usw.)base-uri: Beschränkt die URLs für<base>-Elementemanifest-src: Beschränkt die URLs für Web-App-Manifesteframe-ancestors: Steuert, welche Seiten Ihre Discourse-Instanz in einem iframe einbetten könnenupgrade-insecure-requests: Aktualisiert HTTP-Anfragen automatisch auf HTTPS (enthaltet, wennforce_httpsaktiviert ist)
CSP in Discourse konfigurieren
Verfügbare Einstellungen
content_security_policy: Aktiviert oder deaktiviert CSP (Standard: an)content_security_policy_report_only: Aktiviert den CSP Report-Only-Modus (Standard: aus)content_security_policy_script_src: Ermöglicht die Erweiterung der Standard-script-src-Direktivecontent_security_policy_frame_ancestors: Aktiviert dieframe_ancestors-Direktive (Standard: an)
So aktivieren Sie CSP
- Navigieren Sie zu Ihrem Admin-Bereich.
- Gehen Sie zu den Sicherheitseinstellungen.
- Suchen Sie die Einstellung
content_security_policyund stellen Sie sicher, dass sie aktiviert ist.
Es wird empfohlen, zunächst den CSP Report-Only-Modus zu verwenden, um potenzielle Probleme zu identifizieren, bevor Sie CSP vollständig aktivieren:
- Aktivieren Sie die Einstellung
content_security_policy_report_only. - Überwachen Sie die Browserkonsole auf CSP-Verletzungen.
- Beheben Sie legitime Verletzungen, indem Sie die CSP bei Bedarf erweitern.
- Sobald Sie sicher sind, dass es keine falschen Positivmeldungen gibt, deaktivieren Sie den Report-Only-Modus und aktivieren Sie CSP vollständig.
Erweiterung der Standard-CSP
Wenn Sie zusätzliche Skriptquellen zulassen müssen, können Sie die script-src-Direktive mit der Einstellung content_security_policy_script_src erweitern. Sie können hinzufügen:
- Hash-Quellen
'wasm-unsafe-eval''unsafe-eval'(mit Vorsicht verwenden)
Beispiel:
'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=' 'unsafe-eval'
Seien Sie vorsichtig beim Hinzufügen von 'unsafe-eval' oder anderen zulässigen Direktiven, da dies die Wirksamkeit von CSP verringern kann.
CSP und Integrationen von Drittanbietern
Bei der Verwendung von Diensten von Drittanbietern wie Google Tag Manager, Google Analytics oder Werbediensten müssen Sie möglicherweise Ihre CSP-Einstellungen anpassen. In den meisten Fällen mit Discourse-Version 3.3.0.beta1 oder höher funktionieren externe Skripte aufgrund der „strict-dynamic"-CSP-Implementierung ohne zusätzliche Konfiguration.
Wenn Sie auf Probleme stoßen, müssen Sie möglicherweise:
- Die erforderlichen Skriptquellen identifizieren, indem Sie die Browserkonsole überwachen.
- Die erforderlichen Quellen zur Einstellung
content_security_policy_script_srchinzufügen. - Bei komplexen Integrationen wie Werbediensten, die externe Ressourcen laden, die cross-domain-Rendering-Funktion aktivieren (Beispiel-PR von discourse-adplugin, die dies umsetzt).
Bewährte Verfahren
- Beginnen Sie mit dem CSP Report-Only-Modus, um potenzielle Probleme zu identifizieren.
- Verschärfen Sie Ihre CSP schrittweise, während Sie legitime Verletzungen beheben.
- Überprüfen Sie regelmäßig Ihre CSP-Einstellungen und passen Sie sie bei Bedarf an.
- Seien Sie vorsichtig beim Hinzufügen zulässiger Direktiven wie
'unsafe-eval'oder'wasm-unsafe-eval'. - Halten Sie Ihre Discourse-Instanz auf dem neuesten Stand, um von den neuesten CSP-Verbesserungen zu profitieren.
Häufig gestellte Fragen (FAQs)
F: Ich sehe viele CSP-Verletzungsberichte. Sollte ich besorgt sein?
A: Viele CSP-Verletzungen sind falsche Positivmeldungen, die oft durch Browsererweiterungen oder andere nicht zusammenhängende Skripte verursacht werden. Konzentrieren Sie sich auf die Behebung von Verletzungen, die sich auf die Funktionalität Ihrer Seite beziehen.
F: Kann ich CSP mit Google AdSense oder anderen Werbenetzwerken verwenden?
A: Ja, aber Sie müssen möglicherweise zulässigere CSP-Einstellungen verwenden. Beginnen Sie mit dem Report-Only-Modus und passen Sie Ihre Einstellungen basierend auf den gemeldeten Verletzungen an.
F: Wie behebe ich CSP-Probleme?
A: Verwenden Sie die Entwicklertools Ihres Browsers, um die Konsole auf CSP-Verletzungsmeldungen zu überwachen. Diese helfen Ihnen zu identifizieren, welche Ressourcen blockiert werden und warum.







