PHPackages                             fucodo/contact-securitycenter - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. fucodo/contact-securitycenter

ActiveNeos-package[Security](/categories/security)

fucodo/contact-securitycenter
=============================

0.1.8(5mo ago)01.8k↓33.3%MITPHP

Since Aug 26Pushed 5mo ago1 watchersCompare

[ Source](https://github.com/fucodo/flow.securitycenter)[ Packagist](https://packagist.org/packages/fucodo/contact-securitycenter)[ RSS](/packages/fucodo-contact-securitycenter/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (9)Dependencies (4)Versions (10)Used By (0)

Securitycenter
==============

[](#securitycenter)

- adds a security center to a kaystrobach.backend application

Usage
-----

[](#usage)

- just composer req the lib

External libraries
------------------

[](#external-libraries)

-

Functionality
-------------

[](#functionality)

- hooks into repositories to log changes
- allows to track logins and login failures per user

Securitycenter
==============

[](#securitycenter-1)

- adds a security center to a kaystrobach.backend application

Usage
-----

[](#usage-1)

- just composer req the lib

External libraries
------------------

[](#external-libraries-1)

-

Functionality
-------------

[](#functionality-1)

- hooks into repositories to log changes
- allows to track logins and login failures per user

Konzept
-------

[](#konzept)

---

Security Center Logging System
==============================

[](#security-center-logging-system)

Inhaltsverzeichnis
------------------

[](#inhaltsverzeichnis)

1. [Einleitung](#einleitung)
2. [Features](#features)
3. [Installationsanleitung](#installationsanleitung)
4. [Event- / Slot-Pattern](#event--slot-pattern)
5. [Datenmodell](#datenmodell)
6. [Beispielimplementierung](#beispielimplementierung)
7. [Konfiguration](#konfiguration)
8. [Nutzung](#nutzung)
9. [Erweiterbarkeit](#erweiterbarkeit)
10. [Troubleshooting](#troubleshooting)

---

Einleitung
----------

[](#einleitung)

Das Security Center Logging System ist ein Werkzeug zur Protokollierung und Analyse von sicherheitsrelevanten Aktivitäten. Es ermöglicht es, verdächtige Ereignisse zu erfassen, zu kategorisieren und geeignete Aktionen basierend auf festgelegten Regeln zu initiieren.

Features
--------

[](#features)

- **Kategorisierung von Aktivitäten**: Aktivitäten werden mit vier Schweregraden klassifiziert (`Notice`, `Warning`, `Error`, `OK`).
- **Erweiterbares Event- / Slot-Pattern**: Ermöglicht das Hinzufügen spezifischer Ereignisse und zugehöriger Aktionen.
- **Datenpersistenz**: Unterstützt Speicherung mit Entity-Klassen und eingebetteten Objekten.
- **Benutzer- und Admin-Interaktion**: Verwaltung von Benutzer- und Admin-Genehmigungen.
- **Unterstützung mehrerer Datenquellen**: Aktivitäten können aus internen oder externen Quellen kommen.

Installationsanleitung
----------------------

[](#installationsanleitung)

1. Installieren Sie die benötigten PHP-Abhängigkeiten mittels Composer: ```
    composer install
    ```
2. Fügen Sie die Konfiguration für die Berechtigungen die `Policy.yaml` hinzu.
3. Führen Sie Migrationen aus, um die Datenbanktabellen zu erstellen: ```
    ./flow doctrine:migrate
    ```
4. Stellen Sie sicher, dass der Signal-Slot-Dispatcher aktiviert ist.

Event- / Slot-Pattern
---------------------

[](#event---slot-pattern)

Das Logging-System nutzt das Event- / Slot-Pattern, um Aktivitäten zu erfassen. Das `Signal-Slot`-Modul wird verwendet, um Ereignisse mit Listenern zu verbinden.

-

### Beispiel: Login-Tracking

[](#beispiel-login-tracking)

- **Signal**: Ein Benutzer wird authentifiziert.
- **Slot**: Ein Log-Eintrag wird erstellt.

### Verbindung:

[](#verbindung)

```
$dispatcher->connect(
    AuthenticationProviderManager::class,
    'authenticatedToken',
    LoginSlot::class,
    'trackLogin'
);
```

Datenmodell
-----------

[](#datenmodell)

Die zentrale Klasse ist `ActivityLogEntry`. Sie speichert die Details zu einer Aktivität.

### Attribute:

[](#attribute)

- **`severity`**: Schweregrad der Aktivität (`Notice`, `Warning`, `Error`, `OK`).
- **`createdAt`**: Zeitpunkt der Erstellung.
- **`expiresAt`**: Zeitpunkt der Löschung.
- **`title`**: Titel der Aktivität.
- **`message`**: Menschenlesbare Notizen oder Hinweise aus dem System
- **`code`**: Nummer des Fehlers / Nachrichtentyps
- **`userIdentity`**: Benutzerkennung.
- **`networkAddress`**: IP-Adresse und Netzwerkdetails (bestehend aus IP-Adresse und Hostname).
- **`device`**: Gerätedetails (bestehend aus clientFamily, clientVersion, clientEngine, osFamily, osInfo, osVersion, deviceName, brandName, model, bot).
- **`parentLogEntry`**: Referenz zu einem vorherigen Log-Eintrag (für verknüpfte Ereignisse).
- **`source`**: Meistens `internal` kann aber auch ein externe Webhook für andere Anwendungen sein.
- **`sourceIdentifier'**: Technischer Identifier der Quelle.
- **`data`**: Zusärtliche Technische Daten als Information
- **`reviewNotes`**: Menschenlesbare Notizen oder Hinweise nach einem Review

Zusätzlich werden noch die folgenden Prüfungsanfragen erfasst:

- **`userApproval`**: Nutzer soll das Ereignis bestätigen / prüfen
- **`adminApproval`**: Admin / Support soll das Ereignis bestätigen / prüfen

Zu jeder Prüfungsanfrage werden die folgenden Daten erfasst:

- **`needed`**: Prüfung erforderlich?
- **`doneAt`**: Wann erfolgte die Prüfung
- **`signalUri`**: Externer Dienst, der bei Statusänderung informiert werden soll
- **`doneBy`**: Externer Dienst, der bei Statusänderung informiert werden soll

Backendmodul für Nutzer
-----------------------

[](#backendmodul-für-nutzer)

Das System bietet ein Backendmodul, in dem Benutzer alle mit ihnen verbundenen Log-Einträge einsehen können. Hierbei werden detaillierte Informationen zu den Aktivitäten angezeigt, wie z. B. Zeitpunkt, Schweregrad und Beschreibung. Benutzer haben die Möglichkeit, eine Überprüfung durch den Support anzufordern, indem sie direkt in der Oberfläche eine Review-Anfrage erstellen. Das Modul stellt Filter- und Suchfunktionen bereit, um spezifische Einträge schnell zu finden.

Backendmodul für Support und Administration
-------------------------------------------

[](#backendmodul-für-support-und-administration)

Ein zweites Modul ist speziell für Administratoren konzipiert. Es ermöglicht den Admins, alle eingereichten Review-Anfragen von Benutzern einzusehen und diese zu bearbeiten. Administratoren können den Status der Anfragen ändern, Kommentare hinzufügen und gegebenenfalls Maßnahmen ergreifen. Das Modul bietet eine klare Übersicht über alle offenen und abgeschlossenen Anfragen sowie Filtermöglichkeiten, um nach Schweregrad oder Benutzer zu sortieren. Dadurch wird ein effizienter und strukturierter Bearbeitungsprozess gewährleistet.

Beispielimplementierung
-----------------------

[](#beispielimplementierung)

### LoginSlot:

[](#loginslot)

```
public function trackLogin(TokenInterface $token): void
{
    $identifier = $token->getAccount()->getAccountIdentifier();
    $log = new ActivityLogEntry();
    $log->setTitle('Login');
    $log->setSeverity(ActivityLogEntry::SEVERITY_NOTICE);
    $log->setUserIdentity($identifier);
    $this->persistenceManager->allowObject($log);
    $this->persistenceManager->add($log);
    $this->persistenceManager->persistAllowedObjects();
}
```

Konfiguration
-------------

[](#konfiguration)

Konfigurieren Sie den Dispatcher in der `Package.php`:

```
$dispatcher->connect(
    AuthenticationProviderManager::class,
    'authenticatedToken',
    LoginSlot::class,
    'trackLogin'
);
```

Löschung
--------

[](#löschung)

Jeder Eintrag enthält ein **`expiresAt`** Attribut. Einträge deren Ablaufdatum erreicht ist werden regelmäßig durch einen Hintergrundjob gelöscht. Es kann zusätzlich in der Konfiguration ein maximaler Zeitraum bis zum Ablauf angegeben werden. Kein Einträg kann älter werden, als diese Angabe.

Nutzung
-------

[](#nutzung)

1. Implementieren Sie neue Slots für benutzerdefinierte Ereignisse.
2. Binden Sie die Slots an Signale über den Dispatcher.
3. Überprüfen Sie die Log-Einträge im entsprechenden Datenbank-Repository.

Erweiterbarkeit
---------------

[](#erweiterbarkeit)

- **Neue Ereignisse hinzufügen**: Implementieren Sie zusätzliche Slots und verbinden Sie diese mit relevanten Signalen.
- **Anpassung von Log-Daten**: Passen Sie die `ActivityLogEntry`-Klasse an, um zusätzliche Felder zu unterstützen.
- **Hooks**: Eingehende und Ausgehende Webhooks für weitere Anbindungen

Troubleshooting
---------------

[](#troubleshooting)

- **Keine Logs erstellt**: Überprüfen Sie, ob der Dispatcher korrekt konfiguriert ist.
- **Datenbankfehler**: Vergewissern Sie sich, dass die Migrationen erfolgreich durchgeführt wurden.
- **Fehlerhafte Slots**: Stellen Sie sicher, dass die Methoden-Signaturen der Slots korrekt mit den Signalen übereinstimmen.

Fixes
-----

[](#fixes)

Replace Proxy Objects with their correspondig implementation

```
UPDATE sbs_singlesignon_commands_cleaner_domain_model_recordmark_cb34f
SET recordtype = REPLACE(recordtype, 'Neos\\Flow\\Persistence\\Doctrine\\Proxies\\__CG__\\', '')
WHERE recordtype LIKE '%Proxies%';
```

Find duplicates after cleanup

```
SELECT recordtype, recordidentifier, COUNT(*)
FROM sbs_singlesignon_commands_cleaner_domain_model_recordmark_cb34f
GROUP BY recordtype, recordidentifier
HAVING COUNT(*) > 1
```

Cleanup Duplicates (run multiple times)

```
DELETE FROM sbs_singlesignon_commands_cleaner_domain_model_recordmark_cb34f
WHERE persistence_object_identifier IN (
    SELECT u.persistence_object_identifier
    FROM sbs_singlesignon_commands_cleaner_domain_model_recordmark_cb34f u, sbs_singlesignon_commands_cleaner_domain_model_recordmark_cb34f u2
    WHERE u.recordtype = u2.recordtype AND u.recordidentifier = u2.recordidentifier AND u.created > u2.created
)
```

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance72

Regular maintenance activity

Popularity19

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~58 days

Total

9

Last Release

165d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/3c6681704a769ab93a20ba54d94054d0f3f1e81b99341e8cfa29d91f6d8f16fb?d=identicon)[kaystrobach](/maintainers/kaystrobach)

---

Top Contributors

[![kaystrobach](https://avatars.githubusercontent.com/u/1185776?v=4)](https://github.com/kaystrobach "kaystrobach (25 commits)")

### Embed Badge

![Health badge](/badges/fucodo-contact-securitycenter/health.svg)

```
[![Health](https://phpackages.com/badges/fucodo-contact-securitycenter/health.svg)](https://phpackages.com/packages/fucodo-contact-securitycenter)
```

###  Alternatives

[defuse/php-encryption

Secure PHP Encryption Library

3.9k162.4M214](/packages/defuse-php-encryption)[matomo/matomo

Matomo is the leading Free/Libre open analytics platform

21.4k37.3k](/packages/matomo-matomo)[mews/purifier

Laravel 5/6/7/8/9/10 HtmlPurifier Package

2.0k16.7M113](/packages/mews-purifier)[robrichards/xmlseclibs

A PHP library for XML Security

41478.1M118](/packages/robrichards-xmlseclibs)[bjeavons/zxcvbn-php

Realistic password strength estimation PHP library based on Zxcvbn JS

87117.5M63](/packages/bjeavons-zxcvbn-php)[illuminate/encryption

The Illuminate Encryption package.

9229.7M280](/packages/illuminate-encryption)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
