Zum Hauptinhalt springen

Eine eigene Erweiterung bauen: Sicherheit & Praxisbeispiel

Das Sicherheits-Pflichtprogramm

Genau die Dinge, die wir bei der eigenen Erweiterungs-Bug-Suche fanden und beheben mussten - für eine eigene Erweiterung von Anfang an mitdenken:

  • CSRF: jedes Formular braucht <?php echo csrf_field(); ?>, jede Verarbeitung Csrf::verify()
  • Rate-Limiting bei öffentlichen Formularen: new LoginRateLimiter($db, maxAttempts: 5, windowMinutes: 15, table: 'cms_meine_erweiterung_rate_limit') - eigene Tabelle je Erweiterung, gleiches Prinzip wie beim Kontaktformular
  • Echte Datei-Typ-Prüfung bei Uploads, niemals nur die Dateiendung vertrauen
  • URL-Schema-Prüfung, falls Nutzereingaben in href/src landen - siehe die BBCode-Lücke, die genau das versäumt hatte
  • Rechteprüfung in JEDER Admin-Seite, nicht nur über die manifest.json-Berechtigung (die steuert nur die Sichtbarkeit im Menü, nicht den tatsächlichen Zugriffsschutz)

Praxisbeispiel: öffentliches Formular mit vollem Schutz

use Nexis\Security\Csrf;
use Nexis\Security\LoginRateLimiter;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!Csrf::verify($_POST['csrf_token'] ?? null)) {
        die('Sicherheitsprüfung fehlgeschlagen.');
    }
    $rateLimiter = new LoginRateLimiter($db, maxAttempts: 5, windowMinutes: 15, table: 'cms_meine_rate_limit');
    if ($rateLimiter->isBlocked($_SERVER['REMOTE_ADDR'])) {
        die('Zu viele Anfragen.');
    }
    $rateLimiter->registerFailure($_SERVER['REMOTE_ADDR']);
    // ... eigentliche Verarbeitung ...
}

Vor der Auslieferung: real testen, nicht nur lesen

Die wertvollste Lehre aus der gesamten Entwicklung dieses CMS: keine der gefundenen Sicherheitslücken wäre durch bloßes Code-Lesen aufgefallen. Echte Angriffsversuche mit echten Payloads (z.B. javascript:alert(1) als URL, eine getarnte PHP-Datei mit .jpg-Endung) gehören vor jede Veröffentlichung einer eigenen Erweiterung dazu.

Vollständiges Beispiel zum Herunterladen

Ein Gästebuch - komplette, real installierbare und getestete Erweiterung mit öffentlichem Formular (inkl. CSRF-Schutz, Ratenbegrenzung, Honeypot), Admin-Moderation und eigener Datenbank-Tabelle. Zeigt alles oben Gezeigte im echten Zusammenspiel.

ExampleExtension.zip herunterladen

Hinweis: Wer eine eigene Erweiterung im NexisCore-Marktplatz veröffentlichen möchte, kann optional eine market.md beilegen und den Schnellupload nutzen, statt das Formular von Hand auszufüllen. Mehr dazu: Schnellupload & market.md →