Direkt zum Inhalt springen
pixelwerft klärt auf

Login-Aktivität im Craft CMS protokollieren

Wer hat sich wann eingeloggt, woher kamen die Versuche, wann lief die Session ab? Mit einem sauberen Audit-Log lassen sich diese Fragen beantworten – für Compliance, Security und ein ruhigeres Backend.

In jedem produktiven CMS läuft irgendwann die gleiche Diskussion: Wer hatte vor zwei Wochen Zugriff auf den Kundenbereich? Warum sind gestern Nacht 180 fehlgeschlagene Login-Versuche aufgelaufen? Und aus welchem Netz kam der Admin, der um 3 Uhr morgens ein Entry veröffentlicht hat?

Ohne Protokoll bleiben diese Fragen unbeantwortet. Wir haben deshalb ein Open-Source-Plugin für Craft CMS entwickelt, das genau diese Ereignisse automatisch erfasst: pixelwerft/user-audit. Das Plugin steht unter MIT-Lizenz auf GitHub zur Verfügung und ist auch direkt über den Craft-Plugin-Store installierbar.

User-Audit-Plugin für Craft CMS – Login-Aktivität protokollieren, entwickelt von pixelwerft in St.Gallen

Warum ein Audit-Log überhaupt?

Ein Audit-Log ist nicht «nice to have», sondern in mehreren Alltagssituationen die einzige verlässliche Informationsquelle:

  • Security: Brute-Force-Angriffe auf Login-Formulare sind alltäglich. Ohne Log siehst du sie nicht – und kannst nicht reagieren.
  • Compliance: Nach einem Datenschutzvorfall musst du nachweisen können, wer wann auf was zugegriffen hat. Das geht nur mit Historie.
  • Support & Nachvollziehbarkeit: Wenn im Backend ein Inhalt «plötzlich weg» ist, hilft ein Blick in die Aktivitätsliste meistens schneller als jedes Backup.
  • Betrieb: Aktive Sessions auf einen Blick – praktisch, wenn du vor einem Deploy wissen willst, ob gerade jemand im Backend arbeitet.

Was wird automatisch erfasst?

Das Plugin klinkt sich in die Craft-Events ein und protokolliert, ohne dass du Code anpassen musst:

  • Erfolgreiche Logins (Control Panel und Frontend)
  • Fehlgeschlagene Login-Versuche – mit E-Mail und IP
  • Blockierte Logins (z. B. bei gesperrten Accounts)
  • Logouts und abgelaufene Sessions
  • Custom-Events aus anderen Plugins oder Modulen (über eine einfache API)

Zu jedem Eintrag speichert das Plugin einen breiten Kontext: IP-Adresse, User-Agent, ausgelesene Geräte-, Betriebssystem- und Browser-Informationen, ob der Zugriff über das Control Panel oder das Frontend kam, ob es eine PWA oder ein normaler Browser war, sowie eine Momentaufnahme der User-Gruppen-Mitgliedschaft. Bei Bedarf kommen zusätzlich eigene Metadaten als JSON dazu.

Der Log-Viewer im Control Panel

Im Craft-Admin kommt ein neuer Navigations-Eintrag dazu. Der Viewer zeigt alle Einträge tabellarisch, mit Live-Filter über Event-Typ, User, IP und Zeitraum. Für externe Auswertungen lassen sich die Ergebnisse als CSV exportieren. Eine separate Ansicht listet alle aktiven Sessions – praktisch vor Wartungs- oder Deploy-Fenstern.

Der Zugriff ist über eine dedizierte Berechtigung gesteuert: Nur User mit der Permission «View activity log» sehen den Eintrag in der Navigation. So lässt sich der Audit-Log zielgerichtet z. B. an eine Datenschutz- oder Security-Rolle vergeben, ohne gleich Admin-Rechte verteilen zu müssen.

Dashboard-Widget für den Überblick

Zusätzlich gibt es ein Widget für das Craft-Dashboard. Es zeigt auf einen Blick die letzten 24 Stunden: erfolgreiche Logins, Logouts, fehlgeschlagene Versuche – und die fünf IPs, von denen gerade am meisten fehlerhafte Versuche auflaufen. Wenn dort plötzlich eine unbekannte IP mit 400 Versuchen steht, weisst du Bescheid.

Schutz vor Brute-Force: Login-Throttling

Das Plugin bringt ein integriertes Sliding-Window-Throttling mit. Pro IP und pro E-Mail-Adresse lässt sich definieren, wie viele Fehlversuche innerhalb welchen Zeitfensters erlaubt sind. Wird das Limit überschritten, beantwortet Craft weitere Versuche direkt mit HTTP 429 Too Many Requests – ohne die Datenbank weiter zu belasten und ohne dass die echten Credentials überhaupt geprüft werden.

Das schneidet klassische Credential-Stuffing-Attacken an der Wurzel ab. Die Schwellenwerte sind in den Plugin-Settings konfigurierbar, damit sie zum realen Nutzungsverhalten deiner Redaktion passen.

«Von einem neuen Ort eingeloggt» – E-Mail-Alerts

Wenn sich ein User zum ersten Mal von einer IP-Adresse einloggt, die in einem konfigurierbaren Rückblickfenster noch nie aufgetaucht ist, verschickt das Plugin automatisch eine Hinweis-Mail an den betreffenden Account. Das ist dasselbe Muster, das grosse Plattformen wie Google oder GitHub nutzen – und es fängt einen Grossteil kompromittierter Accounts ab, bevor Schaden entsteht.

Data Retention: alte Einträge sauber aufräumen

Ein Audit-Log wächst schnell. Damit die Datenbank nicht langsam zuwuchert, bringt das Plugin einen Console-Command mit, der Einträge älter als X Tage löscht. Typischerweise hinterlegst du diesen Command einmalig in deinem Cron und vergisst ihn danach. Die Retention-Dauer legst du in den Settings fest; 0 bedeutet «nie löschen».

Für Entwickler: Custom Events und Self-Service

Zwei Schnittstellen sind bewusst für andere Plugins und für die User selbst gedacht:

  • Custom Event API: Eigene Module können beliebige Ereignisse in die gleiche Audit-Tabelle schreiben – zum Beispiel «Rechnung exportiert», «Vertrag freigegeben» oder «Kampagne versendet». Alles, was du im Backend nachvollziehen können willst.
  • Self-Service-Login-Historie: Ein JSON-Endpoint im Frontend gibt einem eingeloggten User die eigene Login-Historie zurück. Damit lässt sich z. B. eine «Letzte Anmeldungen»-Seite im Kundenbereich bauen, ganz ohne Admin-Zugang.

Installation und Konfiguration

Die Installation ist ein Zweizeiler über Composer:

  • composer require pixelwerft/user-audit
  • ./craft plugin/install user-audit

Alternativ findest du das Plugin im Craft-Plugin-Store und installierst es dort per Klick. Nach der Installation gehst du in Settings → Plugins → User Audit und stellst ein, was für dein Projekt passt: ob Control Panel und/oder Frontend geloggt werden sollen, wie streng das Throttling greift, wie lang die Retention ist und wann ein «neuer Ort»-Alert verschickt wird.

Die Daten liegen in einer eigenen Tabelle user_activity_log (mit dem konfigurierten Craft-Tabellen-Präfix) und haben eine SET NULL-Foreign-Key auf die User-Tabelle. Das heisst: Selbst wenn ein User später gelöscht wird, bleiben die Audit-Einträge erhalten – nur der Referenz-Pointer wird entfernt. Genau das Verhalten, das man in einer Compliance-Diskussion braucht.

Open Source, MIT, auf GitHub

Wir haben das Plugin bewusst als Open Source veröffentlicht. Audit-Logs sind Security-relevant – und bei allem, was Security berührt, ist Transparenz im Quellcode Gold wert. Issues, Pull Requests und Diskussionen sind auf GitHub willkommen:

github.com/pixelwerft/user-audit

Direkt aus dem Craft Plugin Store

Wer lieber mit einem Klick installiert statt über Composer, findet User Audit auch offiziell gelistet – Hier im offiziellen Plugin Store. Bonus Pixel

Manuel Thaler – pixelwerft GmbH

Craft-Projekt absichern oder erweitern?

Wir setzen User-Audit in eigenen Kundenprojekten ein und begleiten Craft-CMS-Projekte von der Plugin-Integration bis zur kompletten Applikationsarchitektur. Wenn du Fragen zum Plugin, zu Backend-Security oder zu einer eigenen Integration hast – schreib uns.

ahoi@pixelwerft.ch

← Zurück zur Übersicht aller Fragen & Antworten