Zum Inhalt

Kategorien & was protokolliert wird

Das Plugin kategorisiert jeden Log-Eintrag automatisch anhand der betroffenen Entität. Insgesamt 13 Rubriken, sortiert nach typischer Audit-Relevanz.

Rubriken-Übersicht

Rubrik (category) Anzeige-Name Typische Entities Audit-Relevanz
customer_data Kundendaten customer, customer_address, customer_group Hoch — DSGVO-Anfragen, Adressänderungen
order_data Bestelldaten order, order_line_item, order_delivery, order_transaction, order_address, order_customer Hoch — Manipulation an Bestellungen, Statusänderungen
product_catalog Produktkatalog product, product_variant, product_category, product_price, product_media, category Mittel — Preis-/Sortimentsänderungen
content Inhalte cms_page, cms_section, cms_block, cms_slot, landing_page, mail_template Mittel — Schaufenster-Inhalte, Mail-Templates
admin_user Admin-User user, user_access_key, acl_role, acl_user_role Sehr hoch — Privilege-Escalation, Account-Übernahme
system_config System-Konfiguration system_config, plugin, app, theme Hoch — Plugin-Settings, Sicherheitsrelevante Konfigs
sales_channel Sales-Channel sales_channel, sales_channel_domain, sales_channel_payment_method, sales_channel_shipping_method Mittel — Shop-Konfig-Änderungen
rules_flows Regeln & Flows rule, flow, flow_sequence, state_machine Mittel — Automatisierungs-Logik
promotion Aktionen & Promotions promotion, promotion_discount, promotion_individual_code Mittel — Rabatt-Manipulation
newsletter Newsletter newsletter_recipient, mail_template_type Niedrig — DSGVO-Opt-In-Verifikation
authentication Authentifizierung (kein Entity — direkt aus Auth-Subscriber) Sehr hoch — Brute-Force-Erkennung, Login-Anomalien
other Sonstiges alle nicht zugeordneten Entities Niedrig — i. d. R. selten relevant

Was wird konkret protokolliert?

Entity-Änderungen (Create / Update / Delete)

Jede DAL-Operation im Admin-Context wird abgefangen. Pro Operation entsteht ein Eintrag:

  • Create → neuer Eintrag, diff enthält alle initial gesetzten Felder
  • Update → ein Eintrag pro Feld-Änderung, diff enthält {feldName: {old: vor, new: nach}}
  • Delete → ein Eintrag, diff enthält den letzten bekannten Zustand der gelöschten Entität
Nur Admin-Context, kein Storefront

Schreib-Operationen, die aus dem Storefront kommen (z. B. neuer Newsletter-Eintrag, Customer-Adress-Änderung im Account, Bestellung anlegen), werden nicht protokolliert — das wäre ein anderer Use-Case (Customer-Auditing) und würde die Tabelle in Sekunden fluten. Filter: actor_type = admin oder integration.

Authentifizierung

Aktion (action) Trigger Felder im Eintrag
login_success erfolgreicher Login an /api/oauth/token actor_username, optional ip_address, user_agent
login_failed fehlgeschlagener Login (HTTP 401 / 400 vom Token-Endpoint) actor_username (eingegebener Username), HTTP-Status-Code
logout expliziter Logout im Admin actor_user_id, actor_username
Login-Failed-Anomalien erkennen

Wenn du im Modul nach category=authentication und action=login_failed filterst, siehst du sofort fehlgeschlagene Login-Versuche. Häufung in kurzer Zeit oder mit ständig wechselnden Usernames deutet auf Brute-Force-Versuche hin. Ergänzend kannst du IP-Erfassung in der Konfig aktivieren — dann siehst du, ob die Versuche von einer IP kommen.

Plugin-Lifecycle

Aktion Trigger
plugin_install Plugin via Store oder ZIP installiert
plugin_activate Plugin aktiviert
plugin_deactivate Plugin deaktiviert
plugin_uninstall Plugin deinstalliert
plugin_update Plugin-Update durchgeführt

entity_name = plugin, entity_label = <PluginName>, category = system_config.

Diff-Inhalt

Das diff-Feld ist JSON mit dem Schema:

{
    "feldName": {
        "old": "alter Wert",
        "new": "neuer Wert"
    },
    "andererFeld": {
        "old": null,
        "new": "neuer Wert"
    }
}

Sonderfälle:

  • Sensitive Felder (password, apiKey, token, …) → Werte sind als *** ersetzt
  • Strings > 2000 Zeichen → Wert wird als [truncated: 12345 chars] markiert (Original zu lang)
  • Arrays/Objects > 4 KB → Wert wird ebenfalls truncated, um DB-Spam zu vermeiden
  • Bei deletenew ist null bei allen Feldern (Eintrag wurde entfernt)
  • Bei createold ist null bei allen Feldern (Eintrag war vorher nicht existent)

Beispiel-Einträge

Beispiel 1: Preisänderung an einem Produkt
{
    "actor_username": "max.muster",
    "actor_type": "admin",
    "category": "product_catalog",
    "action": "update",
    "entity_name": "product_price",
    "entity_id": "abc123…",
    "entity_label": "Test-Produkt (Variante 42)",
    "diff": {
        "gross": {"old": 19.99, "new": 24.99},
        "net": {"old": 16.80, "new": 21.00}
    },
    "created_at": "2026-06-18 14:32:11"
}
Beispiel 2: Login-Failure
{
    "actor_username": "unknown_user",
    "actor_type": "system",
    "category": "authentication",
    "action": "login_failed",
    "entity_name": null,
    "entity_id": null,
    "context_data": {
        "http_status": 401,
        "endpoint": "/api/oauth/token"
    },
    "created_at": "2026-06-18 02:14:55"
}
Beispiel 3: Plugin-Installation
{
    "actor_username": "max.muster",
    "actor_type": "admin",
    "category": "system_config",
    "action": "plugin_install",
    "entity_name": "plugin",
    "entity_label": "KommoraWithdrawalButton",
    "context_data": {
        "version": "1.4.3"
    },
    "created_at": "2026-06-18 11:05:22"
}

Weiter