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 VerarbeitungCsrf::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 →