Joomla HTTP Header Plugin
- Tobias Zulauf
Seit Joomla 4.0.0 liefert der Joomla Core das sogenannte "HTTP Header Plugin" (plg_system_httpheaders) aus, dieses Plugin wird genutzt, um sogenannte "HTTP Response Header" zu setzen. Diese werden genutzt, um dem Browser, welcher die Webseite besucht, Anweisungen zu geben, die nicht in HTML enthalten sind.
In der Standardkonfiguration setzt dieses Plugin folgende Header:
Weitergehend ist es möglich, die folgenden Header zu setzen:
Zuerst schauen wir uns den ersten Reiter des Plugins an (System → Plugins → System → HTTP Headers):

Dort sehen wir die genannten Standardeinstellungen:
X-Frame-Options
Dies ist eine Option welche verhindert das andere Websites unsere eigene Website einbinden können. Im Standard setzt Joomla “SAMEORIGIN”, was bedeutet, dass meine eigene Seite sich selbst schon noch laden darf, aber keine externen Seiten. Z.B. in Joomla 3 war der Media Manager Popup als iFrame eingebunden.
Referrer-Policy
Im Standardverhalten ist diese Option auf "strict-origin-when-cross-origin" gesetzt, dabei wird der Referrer intern weiter mitgeschickt, sobald man aber auf eine externe Seite verwiesen wird, wird nur noch der origin also die Domain (z.B. example.org) übertragen. Wenn auf eine Seite verwiesen wird, welche "weniger sicher ist" also von HTTPS auf HTTP, dann wird kein Header mehr mitgeschickt. Über den Dropdown können die anderen möglichen Werte konfiguriert werden, was diese bedeuten kann hier nachgelesen werden: Referrer-Policy - HTTP | MDN
Cross-Origin-Opener-Policy
Dieser Header mit der Option “same-origin” sorgt dafür, dass bei Klicks auf Links zu externen Webseiten die Seiten in einem eigenen Kontext geöffnet werden. Dies sorgt dafür, dass die geöffnete Seite keinen Zugriff auf die aufrufende Seite bekommt. Auch hier gibt es für spezielle Seiten auch noch unterschiedliche Konfigurationsoptionen, welche aber nur in speziellen Konstellationen nötig sind. Weitere Details: Cross-Origin-Opener-Policy - HTTP | MDN
Force HTTP Headers
Mit der Option "Force HTTP Headers”, können alle verfügbaren Header in einem Subform mit eigenen Werten belegt werden, diese Option sollte nur genutzt werden, wenn man wirklich weis was man tut, da hier die Header Werte nicht validiert werden.
Im zweiten Reiter haben wir nun die Einstellungen zum Header Strict-Transport-Security:
Strict-Transport-Security (HSTS)

Dieser Header ist im Standard nicht aktiv, da wir natürlich nicht davon ausgehen können, dass jede Joomla Website auf HTTPS läuft. Denn mit diesem Header teilen wir den Browsern mit, dass unsere Website nur über HTTPS aufgerufen werden darf. Mit der Einstellung "max-age" konfigurieren wir, wie lange sich der Browser diese Einstellung speichern soll. Mit "Also for Subdomains" sagen wir dem Browser, dass auch alle Subdomains wie img.example.org etc. nur über HTTPS erreichbar sind und Verbindungen via HTTP abzulehnen sind. "Preload", bittet den Browser diese Webseite in die Preload Liste aufzunehmen, dazu müsste diese dann hier noch angemeldet werden: HSTS Preload List Submission
Das bedeutet, dass die großen Browser die Domain als HTTPS only direkt mitliefern und nie eine Verbindung über HTTP mehr zulassen. Weitere Details zur Strict-Transport-Security: Strict-Transport-Security - HTTP | MDN
Content-Security-Policy (CSP)
Am mächtigsten von diesen Headern ist die Content Security Policy, diese bedarf aber etwas Einarbeitung und Vorwissen, welche ich hier nicht im Detail erläutern kann. D.h. bevor man sich mit diesen Optionen beschäftigt, sollte man sich gut über Content-Security-Policy informieren, da man sich hier auch die Webseite kaputt machen kann.
Hier möchte ich daher erstmal nur auf die Joomla spezifischen Einstellungen eingehen.

Mit der ersten Option wird die Content-Security-Policy aktiviert, mit der Client Setting wird hinterlegt, wo der Header welchen wir konfigurieren wirkt, also im Frontend oder im Backend oder bei beiden. Mit Report-Only kann man seine Policy testen, bevor man die Regeln erzwingt. Wenn es auf der aktuell genutzten Seite Verstöße gegen die Regeln gibt, werden diese in der Browser Konsole angezeigt.
Nun die weiteren Optionen:
-
Sobald aktiviert werden Nonces (Number used Once) für inline Javascript und CSS generiert, welche über die Joomla API in die Webseite eingebettet werden
-
Script/Style hashes
-
Sobald aktiviert werden Hashes für die inline Javascript und CSS generiert, welche über die Joomla API in die Webseite eingebettet werden. Diese können dann in der CSP Direktive script-src und style-src benutzt werden.
-
strict-dynamic
-
Diese Option ist eine spezielle Option welche von einigen Browsern implementiert wurde, dabei werden Skripten automatisch vertraut, wenn diese durch ein Hash oder eine Nonce bereits freigegeben wurden.
-
frame-ancestors 'self'
-
Diese Option ist das CSP-äquivalent zum X-Frame-Options Header: SAMEORIGIN.

Mit der Option "Add Directive" können in einem Subform eigene Konfigurationen für die unterschiedlichen Direktiven gesetzt werden, mehr Details hier: Content Security Policy (CSP) - HTTP | MDN