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.

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

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.