Im Juni 2020 veröffentlichte Google auf web.dev einen Artikel mit dem Titel «Protect your resources from web attacks with Fetch Metadata». Es handelt sich um eine zusätzliche Regel für Anfrage-Header, um deine Website vor gängigen Angriffsvektoren zu schützen.
Was ist FetchMetadata?
Kurz gesagt: FetchMetadata sendet deiner Joomla-Site bei jedem Aufruf der Seite einen Satz von http-Headern. So weiss die Anwendung, wie die angeforderte Ressource aufgerufen wurde. Das hilft bei der Entscheidung, wie sie auf den Aufruf reagieren soll. Die Spezifikation bietet die folgenden Header-Abfragen: Sec-Fetch-Site, Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-User.
Der web.dev-Artikel erwähnt folgende Cross-Origin-Angriffsvektoren, gegen die FetchMetadata deine Joomla! Seite schützen kann:
- Cross-Site-Request-Forgery (CSRF)
- Site-übergreifende Skript-Einbindung (XSSI)
- Timing-Angriffe
- Quellenübergreifende Informationslecks
- Angriffe mit spekulativer Ausführung (Spectre)
Werbung
Was sind die Schritte zur Implementierung von FetchMetadata?
In diesem Artikel schreibt der Autor über 5 Schritte oder bessere Regeln, die implementiert werden müssen, um FetchMetadata zu verwenden.
Schritt 1: Erlaube Anfragen von Browsern, die keine FetchMetadata senden
Noch haben nicht alle Browser FetchMetadata implementiert, daher wollen wir vorerst noch alle Browser zulassen, die sie noch nicht implementiert haben. Du kannst die aktuelle Browserkompatibilitätsmatrix im Mozilla MDN überprüfen. Zum jetzigen Zeitpunkt wird es in Chrome, Edge und Opera in den Desktop- und mobilen Browsern unterstützt. Für Firefox ist das noch in der Entwicklung.
Schritt 2: Same-Site- und Browser-initiierte Anfragen zulassen
Diese Regel stellt sicher, dass alle Anfragen von der gleichen Seite (z. B. das Laden eines JSON-Endpunkts oder von Bildern) und browserinitiierte Anfragen wie Lesezeichen oder Navigation auf deiner Seite weiterhin erlaubt sind.
Schritt 3: Einfache Top-Level-Navigation und iframing zulassen
Mit dieser Regel erlauben wir Top-Level-Navigationsanfragen und Iframing, da wir immer noch wollen, dass unsere Site geöffnet werden darf, wenn sie auf einer anderen Site verlinkt ist, sowie wenn sie z. B. mit einem Iframe eingebettet ist.
Schritt 4: Endpunkte ausschliessen, die für seitenübergreifenden Verkehr gedacht sind (optional)
Einige Endpunkte deiner Website, wie z. B. API-Endpunkte, sind von Natur aus für seitenübergreifenden Datenverkehr vorgesehen, sodass sie hier in die Whitelist aufgenommen werden müssen, um sicherzustellen, dass sie trotzdem geladen werden.
Schritt 5: Ablehnen aller anderen Anfragen, die seitenübergreifend sind und nicht der Navigation dienen
Die letzte Regel ist ganz einfach: Alles, was nicht von den obigen Regeln abgefangen wird, wird von der Website zurückgewiesen.
Wie kann ich FetchMetadata in meine Joomla-Seite einbinden?
Wie bei allen Anfragen, bei denen die Joomla-Anwendung ausgelöst wird, kann man die von den Browsern gesetzten Header erkennen und anhand dieser entscheiden, ob die Seite geladen werden soll oder nicht.
Ab sofort ist ein kostenloses und einfach zu bedienendes Joomla-Plugin verfügbar, dass diese Regeln in deine Seiten implementiert. Es heisst «FetchMetadata by zero24» und ist sowohl im JED als auch auf GitHub zu finden.
Um es zu nutzen, musst du nur das Plugin installieren und aktivieren. Alle oben genannten Regeln werden von der Implementierung abgedeckt. Das einzige Mal, wo du es konfigurieren musst, ist, wenn du die Cross-Site-Endpunkte von deiner Seite einstellen musst. In Zukunft werden möglicherweise weitere Optionen hinzugefügt. Gerade dann, wenn es eine Nachfrage nach weiteren, spezifischeren Regeln oder einer reinen Berichtsfunktion gibt. Du kannst dich auf GitHub melden, falls du Fragen, einen Fehler gefunden oder Feature-Wünsche zum Plugin hast.
Fetch Metadata Joomla Plugin
Was sind die nächsten Schritte?
Da man für Joomla 4.0 keine neuen Funktionen mehr einbauen darf, ist die Implementierung der FetchMetadata-Funktion als Core-Funktion erst für Joomla 4.1 vorgesehen. Aber zu diesem Zeitpunkt ist der Code noch nicht geschrieben. Bis es so weit ist, kann man das oben erwähnte Plugin verwenden.
Quelle: magazine.joomla.org