Content Security Policy

  • Joomla Version
    6
    PHP Version
    PHP 8.4.x
    Hoster
    Ionos

    Hallo,

    es gibt ein plugin mit dem namen system http headers.


    chatgpt empfiehlt eine ziemliche veraenderung dieses plugins. ich kannte das bisher nicht. vielleicht will da mal jemand drueber gucken? hier der text. bisher habe ich nichts veraendert.

    1m 16s nachgedacht

    Ja, über die .htaccess wäre es möglich, aber bei Joomla 6 solltest du dafür besser die eingebaute Funktion „System – HTTP Headers“ verwenden. Joomla kann dabei automatisch Nonces beziehungsweise Hashes für interne Skripte erzeugen. Eine statische .htaccess kann keinen neuen Nonce pro Seitenaufruf generieren und erreicht deshalb nur schwer die von Lighthouse verlangte starke CSP.

    Empfohlene Einrichtung in Joomla
    1. HTTP-Headers-Plugin aktivieren

    Im Joomla-Backend:

    System → Verwalten → Plugins

    Suche nach:

    System – HTTP Headers

    Das Plugin aktivieren und öffnen.

    Achte darauf, dass dort nicht bereits manuell ein anderer Content-Security-Policy-Header eingetragen ist.

    2. CSP-Konfiguration öffnen

    Gehe anschließend zu:

    System → Konfiguration → Content Security Policy

    Je nach deutscher Übersetzung kann es auch Inhaltssicherheitsrichtlinie heißen.

    Stelle zunächst Folgendes ein:

    Einstellung Wert
    Content Security Policy Aktiviert
    Client Website / Site
    Modus Erkennen / Detect
    Nur berichten / Report-Only Aktiviert
    Nonce Aktiviert
    Skript-Hashes Aktiviert
    Style-Hashes Aktiviert
    frame-ancestors 'self' Aktiviert

    Der Report-Only-Modus blockiert zunächst nichts. Er zeigt nur, welche Skripte, Schriftarten, Videos oder Erweiterungen später durch die CSP blockiert würden. Das ist wichtig, weil eine sofort aktivierte strenge CSP beispielsweise das Menü, das Kontaktformular, Cookie-Banner oder eingebettete Videos beschädigen kann.

    3. Die Website testen

    Öffne anschließend verschiedene Bereiche deiner Website:

    Startseite
    Kontaktformular
    Suchfunktion
    mobile Navigation
    Seiten mit Videos
    Seiten mit Karten oder externen Inhalten
    Cookie-Banner

    Danach findest du die Meldungen unter:

    System → Verwalten → Content Security Policy

    Dort zeigt Joomla die blockierten beziehungsweise erkannten Quellen an.

    4. Wichtige Direktiven ergänzen

    Im Modus Benutzerdefiniert / Custom solltest du mindestens diese Direktiven eintragen:

    Direktive Wert
    default-src 'self'
    script-src 'self' 'strict-dynamic'
    object-src 'none'
    base-uri 'self'
    form-action 'self'
    frame-ancestors 'self'
    img-src 'self' data: https:
    style-src 'self' 'unsafe-inline'
    font-src 'self' data: https:
    connect-src 'self' https:

    Bei YouTube-Videos müsste zusätzlich beispielsweise eine frame-src-Direktive hinzukommen:

    'self' https://www.youtube.com https://www.youtube-nocookie.com

    Chrome Lighthouse erwartet für den XSS-Test insbesondere eine wirksame script-src-Regel sowie object-src und base-uri. Nonces oder Hashes sind wesentlich stärker als eine reine Liste erlaubter Domains.

    5. CSP wirklich aktivieren

    Wenn deine Website im Report-Only-Modus vollständig funktioniert:

    Modus auf Automatisch oder Benutzerdefiniert stellen.
    Report-Only deaktivieren.
    Cache von Joomla und Browser löschen.
    Lighthouse erneut starten.

    Erst dann wird der Header als

    Content-Security-Policy

    ausgeliefert. Solange dort

    Content-Security-Policy-Report-Only

    steht, meldet Lighthouse weiterhin:

    No CSP found in enforcement mode

    Nicht gleichzeitig .htaccess und Joomla verwenden

    Lege die CSP entweder über Joomla oder über die .htaccess fest. Zwei CSP-Header werden nicht einfach überschrieben, sondern beide Richtlinien können gleichzeitig angewendet werden. Dadurch können unerwartet Skripte oder Inhalte blockiert werden. Joomla warnt ebenfalls vor doppelten Header-Einträgen.

    Für deine Joomla-Seite ist deshalb diese Variante am sinnvollsten:

    Joomla HTTP-Headers-Plugin + Nonce + zunächst Report-Only, danach Enforcement.

    Achte darauf, dass dort nicht bereits manuell ein anderer Content-Security-Policy-Header eingetragen ist.

    was heisst das? was soll drin stehen?
    43s nachgedacht
    da steht drin
    1m 20s nachgedacht

    Ja, das ist die richtige Stelle. Dort wird nicht der komplette CSP-Header eingetragen, sondern jede Regel einzeln.

    Die vorhandene Zeile

    default-src 'self'

    bedeutet: Inhalte dürfen standardmäßig nur von deiner eigenen Domain alles-ueber-litauen.de geladen werden. Diese Zeile kannst du stehen lassen.

    Einstellungen oben

    Stelle zunächst Folgendes ein:

    Einstellung Auswahl
    Content Security Policy Aktiviert
    Modus Benutzerdefiniert
    Report-Only Aktiviert
    Nonce Aktiviert
    Script-Hashes Aktiviert
    Style-Hashes Aktiviert
    frame-ancestors 'self' Aktiviert

    Bei Client zunächst immer Website/Site auswählen, nicht „Administrator“. Joomla kann Nonces und Hashes automatisch für Skripte und Styles erzeugen, die über die Joomla-API eingebunden werden.

    Diese Regeln eintragen

    Mit dem Pluszeichen jeweils eine neue Zeile hinzufügen:

    Richtlinie Wert
    default-src 'self'
    script-src 'self' 'unsafe-inline' 'strict-dynamic' https:
    style-src 'self' 'unsafe-inline' https:
    img-src 'self' data: https:
    font-src 'self' data: https:
    connect-src 'self' https:
    object-src 'none'
    base-uri 'self'
    form-action 'self'
    frame-src 'self' https://www.youtube.com https://www.youtube-nocookie.com

    Bei jeder Zeile als Client „Website/Site“ auswählen.

    Wichtig: In das Feld „Wert“ kommt nur beispielsweise

    'self' data: https:

    also kein Semikolon und nicht noch einmal img-src.

    script-src, object-src und base-uri sind für den Lighthouse-XSS-Test besonders wichtig. Chrome empfiehlt außerdem Nonces oder Hashes, da einfache Domain-Freigaben leichter umgangen werden können.

    Anschließend testen

    Speichern und danach prüfen:

    Startseite
    Menü auf dem Handy
    Suchfunktion
    Kontaktformular
    Bildergalerien
    eingebettete Videos

    Falls etwas nicht funktioniert, zunächst Report-Only aktiviert lassen. In diesem Modus meldet der Browser Verstöße, blockiert aber noch nichts.

    Wenn alles funktioniert:

    Report-Only: Deaktiviert

    Erst dann sendet Joomla den wirksamen Header

    Content-Security-Policy

    und nicht nur

    Content-Security-Policy-Report-Only

    Lighthouse erkennt eine CSP im Report-Only-Modus ausdrücklich nicht als aktive Schutzrichtlinie.

    Die CSP solltest du danach nicht zusätzlich in die .htaccess schreiben, damit keine zwei unterschiedlichen Richtlinien gleichzeitig wirken.

  • Am Ende hängt es ja auch immer von deinem Setup und deinen Einstellungen ab. Je nach dem was deine KI weiß, kann sie auch nur raten. Daher würde ich das so nicht umsetzen, aber hier ausführlich in gleicher Form:



    Worked for 1m 59s
    Urteil

    Nein, nicht vollständig. Der Text enthält richtige Grundideen, mischt aber ältere Joomla-Anleitungen mit einer sehr aggressiven CSP-Konfiguration. Ich würde diese Einstellungen nicht ungeprüft auf einer produktiven Joomla-Seite übernehmen.

    Dass du bisher nichts verändert hast, war richtig.

    Was stimmt?

    Das Plugin „System – HTTP Headers“ gehört zum Joomla-Core. Für eine dynamische CSP mit Nonces ist es grundsätzlich geeigneter als eine statische Regel in der .htaccess. Joomla erzeugt bei aktivierter Nonce-Funktion einen zufälligen Wert und setzt ihn für script-src und style-src ein.

    Ebenfalls richtig:

    zuerst nur Content-Security-Policy-Report-Only verwenden
    die eigentliche Sperre erst später aktivieren
    CSP nicht gleichzeitig unabhängig in Joomla, Cloudflare und .htaccess pflegen
    script-src, object-src und base-uri sind für eine wirksame XSS-Abwehr besonders wichtig
    Nonces oder Hashes sind stärker als einfache Domain-Freigaben

    Mehrere CSP-Header überschreiben sich nicht einfach. Der Browser berücksichtigt alle Richtlinien. Eine Ressource muss daher durch jede aktive Richtlinie erlaubt werden.

    Was ist falsch oder veraltet?
    1. „Detect“, „Automatic“ und automatische Joomla-Berichte

    Diese Beschreibung passt nicht zur aktuellen Joomla-6-Version des Plugins. Die aktuelle Konfiguration enthält unter anderem:

    CSP aktivieren
    Client
    Report-Only
    Nonce
    Script-Hashes
    Strict Dynamic
    Style-Hashes
    frame-ancestors
    einzelne Direktiven

    Einen auswählbaren Modus „Detect“, „Automatic“ oder „Custom“ gibt es in der aktuellen Joomla-6-Implementierung nicht mehr.

    Auch die Aussage, dass Joomla die gefundenen Verstöße automatisch unter System → Verwalten → Content Security Policy sammelt, stammt aus älteren Joomla-Versionen. In Joomla 6 erzeugt das Plugin im Wesentlichen den Header.

    Ohne report-to beziehungsweise einen echten Reporting-Endpunkt werden keine Berichte an Joomla oder einen Server gesendet. Report-Only-Verstöße lassen sich aber in den Entwicklerwerkzeugen des Browsers beobachten.

    2. Nonces und Hashes erfassen nicht automatisch alles

    Joomla berechnet die Hashes aus den Inline-Skripten und Styles, die in den Dokument-Kopfdaten registriert sind. Das bedeutet nicht, dass automatisch jedes Skript eines Templates, Page Builders, Cookie-Banners oder Drittanbieter-Plugins abgedeckt ist.

    Die Joomla-Dokumentation weist ausdrücklich darauf hin, dass Erweiterungen problematisch sein können, wenn sie:

    rohe Inline-Skripte ausgeben
    onclick, onload oder ähnliche HTML-Attribute verwenden
    Styles direkt über style="..." setzen
    Skripte nicht über die Joomla Document API einbinden

    Bei einer Seite mit Helix Ultimate, SP Page Builder, Cookie-Banner, Werbeskripten und eingebetteten Inhalten ist das Risiko für Probleme entsprechend hoch.

    3. 'unsafe-inline' ist kein zuverlässiges Sicherheitsnetz

    Der vorgeschlagene Wert lautet:

    script-src 'self' 'unsafe-inline' 'strict-dynamic' https:

    Wenn Joomla zusätzlich einen Nonce oder Hash einfügt, ignorieren moderne Browser bei dieser Direktive 'unsafe-inline'. Ohne passenden Nonce oder Hash ausgegebene Inline-Skripte werden dann trotzdem blockiert.

    Dasselbe Problem kann bei style-src auftreten. Ein Page Builder verwendet häufig zahlreiche direkte style-Attribute. Werden diese nicht korrekt berücksichtigt, kann die komplette Darstellung beschädigt werden.

    4. 'strict-dynamic' verändert die Regel grundlegend

    Bei einer gültigen Nonce- oder Hash-basierten Richtlinie sorgt 'strict-dynamic' dafür, dass moderne Browser unter anderem folgende Einträge ignorieren:

    'self'
    https:
    'unsafe-inline'

    Danach werden im Wesentlichen nur noch Skripte mit passender Nonce beziehungsweise passendem Hash sowie von diesen vertrauenswürdig nachgeladene Skripte ausgeführt.

    Das kann eine gute Sicherheitslösung sein. Es ist aber keine Einstellung, die man ohne vollständigen Kompatibilitätstest auf einer bestehenden Joomla-Seite aktiviert.

    Joomla 6 besitzt dafür außerdem einen eigenen Schalter Strict Dynamic. Man muss 'strict-dynamic' daher nicht zusätzlich manuell in das Wertefeld schreiben.

    5. https: ist viel zu pauschal

    Diese Einträge:

    script-src ... https:
    style-src ... https:
    font-src ... https:
    connect-src ... https:

    erlauben grundsätzlich Quellen von jeder HTTPS-Domain. Das verbessert häufig die Kompatibilität, ist aber keine sorgfältig erstellte Allowlist.

    Bei script-src wird das teilweise durch 'strict-dynamic' relativiert. Bei Bildern, Fonts, Styles und Verbindungen bleibt https: jedoch sehr breit.

    6. Die Liste ist nicht vollständig

    Je nach Website können zusätzlich nötig sein:

    media-src
    worker-src
    manifest-src
    child-src

    Ohne eigene Direktive greift häufig default-src 'self'. Dadurch können externe Videos, Blob-Worker, Web-Push, Analysewerkzeuge oder bestimmte Page-Builder-Funktionen blockiert werden.

    form-action 'self' kann außerdem externe Newsletter-, Zahlungs- oder Formularanbieter blockieren. frame-src nur mit YouTube reicht nicht aus, wenn andere Einbettungen verwendet werden.

    Was bedeutet „kein anderer CSP-Header“?

    Im Plugin gibt es einen Bereich Zusätzliche HTTP-Header. Dort sollte keine manuelle Zeile wie diese eingetragen sein:

    Content-Security-Policy

    oder:

    Content-Security-Policy-Report-Only

    wenn du die CSP bereits über den eigenen CSP-Bereich des Plugins konfigurierst.

    Auch in folgenden Bereichen sollte dann keine zweite CSP vorhanden sein:

    .htaccess
    Cloudflare Transform Rules
    IONOS-Serverkonfiguration
    anderes Sicherheits-Plugin
    Template oder System-Plugin

    Wenn in „Zusätzliche HTTP-Header“ aktuell nichts mit Content-Security-Policy steht, musst du dort nichts eintragen.

    Meine Empfehlung für deine Seite

    Auf der Live-Seite würde ich die CSP vorerst nicht erzwingen.

    Für einen ersten ungefährlichen Test auf einer Kopie oder Testdomain:

    Content Security Policy: Aktiviert
    Client: Website
    Report-Only: Aktiviert
    Nonce: Deaktiviert
    Script-Hashes: Deaktiviert
    Strict Dynamic: Deaktiviert
    Style-Hashes: Deaktiviert
    frame-ancestors 'self': Aktiviert

    Als vorläufige Testdirektiven:

    default-src 'self'
    script-src 'self' 'unsafe-inline' https:
    style-src 'self' 'unsafe-inline' https:
    img-src 'self' data: blob: https:
    font-src 'self' data: https:
    connect-src 'self' https: wss:
    frame-src 'self' https:
    media-src 'self' blob: https:
    worker-src 'self' blob:
    object-src 'none'
    base-uri 'self'
    form-action 'self'

    Das ist bewusst noch keine starke finale CSP. Es ist nur eine kompatiblere Ausgangsbasis, um in der Browser-Konsole zu erkennen, welche Dienste deine Seite tatsächlich verwendet.

    Erst danach würde man:

    pauschales https: durch konkrete Domains ersetzen,
    Erweiterungen auf Nonce-Kompatibilität prüfen,
    Nonce und gegebenenfalls Script-Hashes testen,
    anschließend 'strict-dynamic' testen,
    erst ganz am Ende Report-Only deaktivieren.

    Fazit: Die ursprüngliche Empfehlung ist als allgemeine Erklärung brauchbar, aber als konkrete Joomla-6-Anleitung zu ungenau und für eine bestehende produktive Seite zu riskant. Besonders Nonce, Style-Hashes und Strict Dynamic solltest du nicht gleichzeitig und ungeprüft einschalten.

  • Zitat

    chatgpt empfiehlt eine ziemliche veraenderung dieses plugins. ich kannte das bisher nicht. vielleicht will da mal jemand drueber gucken?

    Bestimmt nicht. Mach einfach was chatGPT sagt und trag die Konsequenzen.
    Aber bitte beachtet die forenregeln:

    Wir stellen fest, dass KI-Tools zunehmend genutzt werden. Diese Regel soll Transparenz gewährleisten und Missverständnisse vermeiden:

    • Kennzeichnungspflicht: Jeder Beitrag, bei dem eine KI zum Inhalt beigetragen hat, muss eindeutig als "KI-generiert" gekennzeichnet werden. Unsere Moderatoren behalten sich das Recht vor, die Kennzeichnung “KI-generiert” hinzuzufügen, auch wenn der Nutzer dies nicht selbst getan hat.
    • Konsequenzen bei Verstößen:

      • Freundliche Erinnerung an die Regel und Aufforderung zur Kennzeichnung.
      • Wiederholung: Löschung des Beitrags sowie Bann.


  • Hier kannst du deine Seite testen:

    https://securityheaders.com/

    hab ich. ist aber nicht so einfach. zum beispiel: joomla.de/... alles gruen. downloads.joomla...nicht alles gruen. christiane wird wissen, wie sie sich schuetzt, ich mache mir inzwischen sorgen, weil es so viele angriffe gibt. lass ich das http header plugin in den grundeinstellungen, oder verbesser ich es?

  • Es ist auch meiner Meinung nach durchaus komplex und nicht banal insbesondere CSP!

    Um sinnvollen Einstellungen des System-Plugins HTTP Headers empfehlen zu können müßte man zumindest zuerst wissen um welche Website es sich handelt da dies je nach Website individuell ermittelt werden muß.

    Der in #4 verlinkte jug-zueri.ch Beitrag enthält ja bereits allgemeine Hinweise und Empfehlungen.

    Um welche Website handelt es sich?

    Wird die nachfolgend verlinkte Joomla-Standard .htaccess im Frontend unverändert verwendet?

    github.com/joomla/joomla-cms/blob/6.1.2/htaccess.txt

    Falls nein. Welche Veränderungen wurden an der .htaccess im Frontend vorgenommen?

    Eventuell nützlich z.B. auch:

    Die Standard Einstellungen beinhalten einen ersten Stand welcher für 99% der Seiten passt. Erstmal machst du damit aber auch nichts falsch. CSP also Content-Security-Policy ist da aber noch nicht dabei da es hier eine sehr individuelle Thematik ist.

    Vielleicht ist es ein guter Start hier ein YouTube Video zu schauen wo David in das Thema etwas tiefer eingestiegen ist:

    https://www.youtube.com/watch?v=URa9g-bA4G8

  • Übrigens das Gün und Rot in deinen Bildern in #6 besagt nur das ein entsprechender Eintrag im header der html-Datei z.B. für Permissions-Policy vorhanden ist(Grün) oder nicht vorhanden ist(Rot).

    Ob der jeweilige Wert des Eintrages die "Sicherheit" der Website erhöht oder gar nicht verändert bzw. gar nicht verbessert wird durch die Farbe Grün nicht ausgesagt!

  • Aber bitte beachtet die forenregeln:

    Wir stellen fest, dass KI-Tools zunehmend genutzt werden. Diese Regel soll Transparenz gewährleisten und Missverständnisse vermeiden:

    • Kennzeichnungspflicht: Jeder Beitrag, bei dem eine KI zum Inhalt beigetragen hat, muss eindeutig als "KI-generiert" gekennzeichnet werden. Unsere Moderatoren behalten sich das Recht vor, die Kennzeichnung “KI-generiert” hinzuzufügen, auch wenn der Nutzer dies nicht selbst getan hat.
    • Konsequenzen bei Verstößen:

      • Freundliche Erinnerung an die Regel und Aufforderung zur Kennzeichnung.
      • Wiederholung: Löschung des Beitrags sowie Bann.


    Danke, Christiane.

    Wusste ich nicht. Wenn man schon so lange dabei ist, schaut man nicht mehr so oft rein......^^

    Gruß Elwood

  • Zitat

    Wusste ich nicht. Wenn man schon so lange dabei ist, schaut man nicht mehr so oft rein......^^

    Das ist auch neu.
    Was wir nicht wollen, das ist ein unreflektiertes copy/paste von KI Texten die so tun als würden sie von einem Supporter kommen.

    Man kann sagen "laut Claude oder .. my KI friend.. ist es so oder so. Es scheint mir plausibel aber ich habe es nicht geprüft" oder eben "KI erstellter Text, ich habe es geprüft".

  • Danke an alle für die Tipps. Nicht so einfach und banal....Sieger66 trifft es gut. Ich werde alles ausprobieren, wenn ich wieder zu Hause bin. Das Thema ist halt wegen der vielen joomla Angriffe aktuell. Wäre ja auch mal interessant, wer von den "normalen " joomla Usern was von dem Plugin gehört hat. Ich habe gerade versucht einen Text von mysiteguru zu lesen, wo der Autor über die Komplexität der .htaccess Datei herzieht. Das ist alles nicht so einfach.

  • oxenator , wegen des HTTP-Header Plugin musst du dir gemäss SniperSister nicht zu viel Sorgen machen.

    Aber ich verstehe dich, dass du, wenn möglich, alles im Grünen haben möchtest. Da bei meiner Webseite alles im grünen Bereich ist und du nichts Spezielles installiert hast, könntest du es mit meinen Einstellungen versuchen. (Mache zuerst einen Screenshot, wie deine Einstellungen jetzt sind, und natürlich wie immer ein Backup.)

    Spoiler anzeigen



    Hier noch als Text:

    microphone 'none'; geolocation 'none'

    "camera=(), geolocation=(), microphone=(), payment=()"