Analyse von HTTP Security Headers

  • Hallo,


    ich bin gerade am Setzen/Testen und Analysieren von verschiedenen "HTTP Security Headers".


    Außer den Einträgen "CSP" und "X-Content-Type-Options", die ja bereits in der .htaccess drinstehen (Joomla-Empfehlung), habe ich weitere gesetzt, beispielsweise Referrer-Policy, X-Frame-Options oder das ältere X-XSS-Protection.


    Bei der Analyse durch siwecos.de oder auch securityheaders.com stehe ich vor folgendem Problem, weil beim Aufruf der Seite folgende Weiterleitungen stattfinden. Die erkannten Header stehen in Klammern:


    example.de/ (HTST)

    -> 301: example.de/de/ (X-Content-Type-Options, X-Frame-Options, Referrer-Policy)

    -> 301: example.de/de (Antwort: 200) (HTST)


    Letztendlich wird mir das Ergebnis (Bewertung/Punktzahl) der letzten Seite (200) angezeigt.

    1.) Doch warum werden nicht immer alle gesetzten Header angezeigt? Das Ergebnis wird dadurch verfälscht.

    2.) Und warum könnte bei der ersten Weiterleitung der Header STS fehlen?


    3.) Inwiefern spielen Joomla-Cache und OPCache eine Rolle? Letzterer sollte doch keinen Einfluss haben? Oder wird da über PHP etwas gesetzt, was irgendwie dawischenfunkt?


    EDIT: Alles wird über die .htaccess gesetzt. Das Header-Plugin ist nicht installiert.

    Joomla 3.9.26, PHP 7.4


    Ergänzung:

    Der HSTS wurde von mir nicht gesetzt. Wird der automatisch hinzugefügt, wenn über https übertragen wird?

    Oder sollte ich den zusätzlich angeben mit entsprechender Zeitangabe? Nicht, dass der dann doppelt gesetzt ist.


    Weiterer Beitrag wegen Zeitüberschreitung:


    Für die Admins/Mods: Bitte beim Zusammenfassen auch gleich den falschen Link im ersten Beitrag durchtauschen. richtig wäre natürlich siwecos.de


    Danke!


    Neueste Erkenntnisse:

    Ich habe mal ein paar Test mit einer einfachen Webseite gemacht, also keine mehrsprachige Webseite.

    Das Problem bleibt, die Ursache kann aber nun etwas eingeschränkt werden.


    Per .htaccess wird von http -> https weitergeleitet.

    Die Analyse erfolgt über securityheaders.com

    1.Lasse ich die http-Version analysieren, dann werden alle gesetzten Header angezeigt.

    2. Lasse ich die https-Version analysieren, wird nur der STS angezeigt.


    Ich verstehen nicht, wie dieser Dienst die http->https-Weiterleitung in der .htacccess "aushebeln" kann. Nun gut, man braucht dort bei der Analyse dieses "Follow redirects" nicht aktivieren, dennoch finde ich es seltsam.


    Bei Analyse über siwecos.de wird immer nur der STS Header angezeigt. Ich vermute, dass hier die Weiterleitung zu https autmatisch erfolgt. Kann ja auch nirgends deaktiviert werden (zumindest habe ich es noch nicht gefunden).


    Aber warum werden bei der Analyse der https-Aufrufe die Header nicht angezeigt. Gibt es ev. einen Header, der genau das unterbinden kann?

    Viele Grüße!
    JoomlaWunder

    Einmal editiert, zuletzt von zero24 () aus folgendem Grund: 3 Beiträge von JoomlaWunder mit diesem Beitrag zusammengefügt.

  • Hi,


    Für die Admins/Mods: Bitte beim Zusammenfassen auch gleich den falschen Link im ersten Beitrag durchtauschen. richtig wäre natürlich siwecos.de

    Done.

    Zitat

    Außer den Einträgen "CSP" und "X-Content-Type-Options", die ja bereits in der .htaccess drinstehen (Joomla-Empfehlung), habe ich weitere gesetzt, beispielsweise Referrer-Policy, X-Frame-Options oder das ältere X-XSS-Protection.

    Der CSP Header welcher im Joomla Default hinterlegt ist schützt lediglich gegen XSS via SVGs ein vollständiger CSP Header ist das nicht. ;)

    Der HSTS wurde von mir nicht gesetzt. Wird der automatisch hinzugefügt, wenn über https übertragen wird?

    ggf wird der über deinen Hoster gesetzt? Bei meinem Hoster kann man das einstellen.

    Aber warum werden bei der Analyse der https-Aufrufe die Header nicht angezeigt. Gibt es ev. einen Header, der genau das unterbinden kann?

    Hmm eigentlich nicht. Frage wie sieht die Reihenfolge in der htaccess aus? Also wird erst auf https weitergeleitet und dann die anderen Header gesetzt oder umgekehrt?

  • Ja, den CSP Header müsste ich nach weiteren Tests noch anpassen, sobald es läuft. Den habe ich erstmal wieder als Kommentar gesetzt.


    Ich habe gerade in Erfahrung gebracht, dass mein Hoster den HTSTS automatisch setzt, sobald mit https gearbeitet wird. Vielleicht führt die doppelte Angabe zu meinen Problemen. Allerdindgs hatte ich den bei meinen ersten Versuchen gar nicht verwendet, da er bereits bei der Analyse angezeigt wurde. Ich habe mir da jetzt mal ein Ticket geholt. Mal schauen, was mein Hoster meint.


    Bisher habe ich erreicht, dass für folgende Varianten die Header gesetzt werden können:

    http: // example.com

    https: // example.com

    http: // www.example.com


    Alle Varianten leiten zur https: // www.example.com weiter, wo dann keine Header außer HSTS gefunden werden können, obwohl gesetzt.


    1.) Im Verzeichnis, auf das die Domain gestellt ist, existiert das Problem nicht.


    2.) Im Verzeichnis, auf das die www-Subdomain gestellt ist, liegt die .htaccess, welche oben das Setzen der Header enthält und darunter die http->https-Weiterleitung. Ich vermute auch, dass es irgendein Problem mit der Reihenfolge sein könnte.


    EDIT: Müssen die Headers nicht oberhalb von "RewriteEngine On" stehen?

  • EDIT: Müssen die Headers nicht oberhalb von "RewriteEngine On" stehen?

    Nein, versuch mal die Header als letztes in der htaccess zu setzen.

  • Nein, versuch mal die Header als letztes in der htaccess zu setzen.

    Das macht leider keinen Unterschied.


    Ich frage mich gerade, ob das automatische Setzen des HSTS durch den Hoster auch dieses "includeSubDomains" beinhaltet? Die Probleme kommen ja erst, sobald www ins Spiel kommt (in Verbindung mit http->https).

    Ich kann da nämlich nur ein "max-age" erkennen.


    Beim Hoster kann ich keine diesbezüglichen Einstellmöglichkeiten erkennen. Da muss ich nun auf seine Antwort warten.


    Ich werde den HSTS einfach mal über die .htaccess unsetten und dahinter gleich wieder neu einfügen.

    EDIT: Nein! Das unset und das neue Setzen funktioniert nicht. Keine Reaktion!

  • Hmm das hört sich alles komisch an. Hast du ggf einen anderen Hoster wo du die Konfiguration, also Joomla + htaccess ausprobieren kannst? Damit wir mögliche Holstereinstellungen ausschließen können.

  • Bisher habe ich verschiedene Tarife des gleichen Hosters getestet. Ohne Erfolg!

    Meine Anfrage wurde an die entsprechende Fachabteilung weitergeleitet. Da warte ich morgen noch die Antwort ab.

    Die Alternative wäre SSL über Xampp einzurichten. Das könnte aber weitere Probleme mit sich bringen, weshalb ich davon erst mal Abstand nehme.

  • hmm das Header Plugin läuft zur Joomla runtime daher wird das dann immer gesetzt egal ob www oder non-www. Die htaccess sollte das aber auch können.


    Kannst du sicherheitshalber einmal die htaccess hier posten? Ggf fällt ja noch etwas auf.

  • Hier mal die .htaccess. Diese ist etwas umfangreicher. Aber auch mit anderen funktioniert das nicht, wo dann beispielswiese keine Entfernung des Trailing-Slashes oder die ganzen Cache-Einstellungen unten enthalten sind.

    Und wie gesagt, der STS wird bereits vom Hoster gesetzt, sobald https verwendet wird.


    htaccess.txt


    Nebenfrage:

    Für die Einstellung des CSP-Headers über das Plugin nutze ich momentan "Content-Security-Policy-Report-Only" mit report-uri und dem Skript csp-reporter.php

    Firefox meldet mir die Violations und auch das ein CSP-Bericht versendet wird. Es kommt aber keine Email bei mir an.

    Die Emailadresse wurde im Skript geändert und ich habe es mit dem Pfad zum Skript über /csp-reporter.php versucht als auch mit Angabe der gesamten uri, also https:// ....csp-reporter.php

    Die Domain wurde auch angehängt gemäß Anleitung.


    Woran könnte das liegen?


    Bzgl. der htaccess ist mein Hoster noch am testen?

  • Nun habe ich die Antwort vom Hoster erhalten:


    "Praktisch sollten die Header überhaupt nicht erkannt werden aus der .htaccess, da die PHP Dateien diese überschreiben. Ich kann nicht sagen warum securityheaders.com fürs checken das bei der einen Seite (ohne www) erkennt und bei der anderen (mit-www) nicht. Möchte Sie diese Header setzen, so müssen Sie diese leider in die PHP Dateien einfügen."


    Den ersten Satz kann ich nicht ganz nachvollziehen, da ich in den PHP-Dateien nirgends etwas ergänzt habe.

    Das würde höchstens für eine andere Webseite zutreffen, auf der ich das Plugin "HTTP Header" teste.


    Dann werde ich die HTTP Security Header wohl über das Plugin setzen. Wäre über die .htaccess zwar schön gewesen, da man hier schnell etwas per C&P hätte übernehmen können, aber was soll's.

  • Nebenfrage:

    Für die Einstellung des CSP-Headers über das Plugin nutze ich momentan "Content-Security-Policy-Report-Only" mit report-uri und dem Skript csp-reporter.php

    Firefox meldet mir die Violations und auch das ein CSP-Bericht versendet wird. Es kommt aber keine Email bei mir an.

    Die Emailadresse wurde im Skript geändert und ich habe es mit dem Pfad zum Skript über /csp-reporter.php versucht als auch mit Angabe der gesamten uri, also https:// ....csp-reporter.php

    Die Domain wurde auch angehängt gemäß Anleitung.

    hmm erlaubt dein Hoster die PHP mail() Funktion? Was kannst du im Netzwerk Tab sehen kommt der request an und gibt nen HTTP 200 zurück?


    "Praktisch sollten die Header überhaupt nicht erkannt werden aus der .htaccess, da die PHP Dateien diese überschreiben. Ich kann nicht sagen warum securityheaders.com fürs checken das bei der einen Seite (ohne www) erkennt und bei der anderen (mit-www) nicht. Möchte Sie diese Header setzen, so müssen Sie diese leider in die PHP Dateien einfügen."

    Das hört sich für mich auch sehr komisch an. Ja wenn mein Plugin läuft dann könnte es passieren das die Überschrieben werden aber ein "Standard" Joomla setzt diese Header noch nicht.



    Dann werde ich die HTTP Security Header wohl über das Plugin setzen. Wäre über die .htaccess zwar schön gewesen, da man hier schnell etwas per C&P hätte übernehmen können, aber was soll's.

    Normalerweise(TM) sollte das auch genau so gehen, war bis jetzt auch auf allen Seiten so wo ich das gemacht habe.

    Hier mal die .htaccess. Diese ist etwas umfangreicher. Aber auch mit anderen funktioniert das nicht, wo dann beispielswiese keine Entfernung des Trailing-Slashes oder die ganzen Cache-Einstellungen unten enthalten sind.

    Hmm sehe ich jetzt auch keine größeren Probleme besonders da du ja auch schon "header als letztes setzen" probiert hast.

  • hmm erlaubt dein Hoster die PHP mail() Funktion? Was kannst du im Netzwerk Tab sehen kommt der request an und gibt nen HTTP 200 zurück?

    Test-Emails kann ich aus der Joomla-Konfiguration heraus als PHP-Mail versenden. Im Skript verwende ich auch die gleiche Email-Adresse.


    Und wenn ich Violations provoziere erhalte ich die Meldung, dass ein CSP-Bericht versendet wird.

    Es wird auch mit einer 200er-Antwort bestätigt.


    Könnte es sein, dass in der Email noch bestimmte Angaben ergänzt werden müssen ("from" oder so...)?

    Ich versuche mal an die Logs zu kommen?

  • Nach weiteren Webrecherchen und Tests habe ich folgendes herausgefunden. Es muss bei meinem Hoster tatsächlich noch ein $from bzw. ein Header angegeben werden, also beispielsweise:


    Code
    ....
    $from="From: <mail@example.org>";
    ....
    
    mail($recipient, sprintf($subject, $reportSource),$mailData,$from);
    .....

    Dann werden mir alle CSP-Berichte zugemailt. Ansonsten landen die irgendwo im Nirvana.

  • Nach weiteren Webrecherchen und Tests habe ich folgendes herausgefunden. Es muss bei meinem Hoster tatsächlich noch ein $from bzw. ein Header angegeben werden, also beispielsweise

    Ha das Problem hatte ich bis jetzt bei den 3 Hostern wo ich das script bis jetzt genutzt habe noch nicht, hab das aber jetzt auf der to-do liste das ganze im script zu ergänzen. Danke.