Versionsverlauf von Cisilino Site Defense Network, dem WordPress-Sicherheits-Plugin. Es schützt den Login, führt ein Aktivitätsprotokoll und prüft die Dateiintegrität. Dazu bietet es optionale Härtungen. Hier finden Sie zu jedem Release, was sich geändert hat. Die aktuelle Version ist die 1.0.15.
Version 1.0.15
- Neuer Tab „Debug-Log“. Er schreibt die PHP-Fehler der Website in eine eigene Datei. Der Administrator schaltet ihn ein und aus, ohne
wp-config.phpzu ändern. Er schaltet sich nach der gewählten Zeit selbst aus: 1 Stunde, 24 Stunden oder 7 Tage. - Kein Datenverlust. Das Log wird zu
debug.logund zum Server-Log hinzugefügt und ersetzt sie nicht. Dateien werden nie von selbst gelöscht oder gekürzt. - Überschreitet eine Datei die gewählte Größe von 1 bis 50 MB, wird sie geschlossen und als
.zipkomprimiert. Vor dem Entfernen des Originals prüft das Plugin das Zip. Bei der Obergrenze von 200 MB stoppt das Log und meldet es. - Beim Ausschalten bleiben die Dateien erhalten. Sie lassen sich nur in der Verwaltung löschen, einzeln oder alle auf einmal.
- Die Dateien liegen in einem Ordner mit zufälligem Namen in
uploads, geschützt durch.htaccess. Das Log schaltet sich nicht ein, wenn der Ordner aus dem Internet erreichbar ist. Du kannst die letzten 200 Einträge mit einem Filter nach Level lesen und die Dateien herunterladen. - Sicherheit: Die Sperre der Benutzer-Enumeration (
?author=N) funktionierte nicht. Die WordPress-Weiterleitung auf/author/<nome>/lief vor der Prüfung. Außerdem umgingen Werte wie1aoderauthor[]=1die Sperre. Jetzt läuft die Prüfung zuerst und gilt für jeden Wert. - Sicherheit: Die Sperre der PHP-Ausführung in
uploadsignorierte Endungen in Großbuchstaben, zum Beispielshell.PHP, die viele Hostings ausführen. Sie deckte auch WordPress in einem Unterordner nicht ab. - Sicherheit: Bei Multisite schreiben die Plugin-Einstellungen die gemeinsame
.htaccessdes ganzen Netzwerks. Sie sind jetzt dem Super-Admin vorbehalten und nicht mehr jedem Administrator einer Unterseite. - Sicherheit: Der Grund für einen im Panel empfangenen Bann wird als Kommentar in
.htaccessgeschrieben. Er darf keine Steuerzeichen mehr enthalten und nicht mehr mit\enden. In Apache verlängert dieses Zeichen die Zeile und hob die nächste Sperrregel auf. - Grenzen: Das Log erfasst Fehler, die nach dem Laden des Plugins entstehen, nicht aber solche, die mit
@unterdrückt wurden. Bei der Deinstallation bleiben die gesammelten Dateien inuploads.
Version 1.0.14
- Dokumentation: Die Readme verweist jetzt auf die Anleitungen und den Versionsverlauf auf cisilino.com. Das Verhalten des Plugins ändert sich nicht.
Version 1.0.13
- Rate Limiting für Autoren: Das Standardlimit lag bei 3 Inhalten in 5 Minuten. Es sperrte auch einen Administrator, der einfach nur arbeitete, etwa mehrere Seiten hintereinander importierte oder duplizierte. Es traf nicht nur kompromittierte Konten. Der neue Standardwert ist 150 Inhalte in 5 Minuten. Er verträgt intensive echte Nutzung und blockiert weiterhin, wer Hunderte auf einmal veröffentlicht. Wer den Wert schon angepasst hatte, bleibt unberührt.
Version 1.0.12
- Rate Limiting für Autoren: Es zählt nicht mehr, was innerhalb einer WordPress-Installation oder in einer temporären Umgebung mit anderem Tabellenpräfix geschieht. Ein realer Fall: Das Plugin Check legt eine Testinstallation mit Beispielbeitrag, Beispielseite und Datenschutzerklärung an. Es sperrte den Administrator, der es benutzte. Auch automatische Entwürfe, Revisionen und Elemente im Papierkorb zählen nicht mehr.
- Hinweis im Dashboard, solange eine Sperre aktiv ist. Der gesperrte Benutzer sieht den Grund und das Enddatum. Administratoren sehen die Liste der gesperrten Benutzer mit dem Link zum Aufheben.
- Der Reiter „Rate limiting“ erklärt konkret, was gezählt wird und was nicht. Er erklärt auch, was es bedeutet, gesperrt zu sein, und wie man wieder herauskommt.
Version 1.0.11
- Neuer Reiter „Rate limiting“ mit drei Schutzvorkehrungen, die einzeln ein- und ausgeschaltet werden können. Autoren: Ein Benutzer, der im Zeitfenster T mehr als N Beiträge/Seiten anlegt oder veröffentlicht, wird für S Sekunden gesperrt. Der Hauptadministrator erhält eine E-Mail mit den jüngsten Inhalten zur Kontrolle. Besucher (Gäste): Mehr als N Kommentare oder Kontaktformulare im Zeitfenster T sperren die IP für S Sekunden. Die Sperre gilt nur für diese Art des Absendens. Die Zählung liegt in einer eigenen Tabelle und funktioniert auch bei deaktivierten Kommentaren. Pflicht-E-Mail (im Reiter Benutzerregistrierung): Kein Benutzer kann ohne gültige E-Mail-Adresse angelegt werden, auf jedem Anlegeweg. Jede Schutzvorkehrung hat zwei Schalter: Rate Limit aktiv ja/nein und E-Mail-Benachrichtigung ja/nein. Die Autoren-Benachrichtigung ist standardmäßig an, die Besucher-Benachrichtigung aus. Alle Werte N, T und S sind konfigurierbar. Aktive Sperren werden im Reiter aufgelistet und lassen sich aufheben.
Version 1.0.10
- Einen weiteren blockierenden ERROR des Plugin Check (WordPress.Security.EscapeOutput.OutputNotEscaped) behoben, der die vorherige Korrektur überlebt hatte. Das phpcs:ignore beim mehrzeiligen echo in print_idle_script() deckte nur die eigene Zeile ab. Die folgenden Zeilen mit admin_url()/wp_create_nonce()/wp_login_url() deckte es nicht ab. Der Aufruf wird jetzt vor der einzigen echo-Zeile einer Variablen zugewiesen, die das Ignore vollständig trägt.
Version 1.0.9
- Einen blockierenden ERROR des offiziellen Plugin Check behoben (PluginCheck.CodeAnalysis.Heredoc.NotAllowed). Das Inline-Skript des Admin-Auto-Logouts verwendete Heredoc-Syntax, die die Richtlinien von wordpress.org nicht erlauben. Es ist jetzt ein normaler PHP-String, ohne Verhaltensänderung.
Version 1.0.8
- Einen Fatal Error behoben (Uncaught Error: Call to undefined function get_home_path()), der bei einem fehlgeschlagenen Login-Versuch auftreten konnte. Csdn_Htaccess::htaccess_path() lud fälschlich wp-admin/includes/misc.php statt wp-admin/includes/file.php, der Datei, die get_home_path() tatsächlich definiert. Im Admin-Kontext blieb der Fatal Error unsichtbar, weil die Funktion anderweitig schon verfügbar war. Auf wp-login.php konnte er dagegen den Zugriff auf die Seite mit einem Fatal Error blockieren. Das Plugin sollte nur den Versuch protokollieren.
Version 1.0.7
- Sicherheit: Eine Race Condition in der Brute-Force-Erkennung behoben (Csdn_Detector::on_login_failed). Sie erlaubte es, die lokale Sperrschwelle zu umgehen, indem fehlgeschlagene Login-Versuche für dieselbe IP parallel gesendet wurden. Der Zähler ist jetzt ein atomarer Upsert (INSERT … ON DUPLICATE KEY UPDATE), kein getrenntes Lesen und Schreiben mehr.
Version 1.0.6
- Neuer Reiter „Paranoic Hardening“: optionale HTTP-Sicherheits-Header (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, HSTS). Sie sind alle standardmäßig aus und werden über WordPress (send_headers) angewendet, nicht über .htaccess. Sie funktionieren daher auch ohne mod_headers.
- HSTS ist durch eine ausdrückliche Schutzregel gesichert. Die Aktivierung wird abgelehnt, wenn die Speicheranfrage nicht über https kommt. So wird kein Header gesendet, der die Seite für die Empfänger unerreichbar machen würde, falls die Seite nicht mehr immer https wäre.
- Jede Option hat eine eingebettete Erklärung direkt unter dem Bedienelement. Sie sagt, was die Option tut, wann sie sicher ist und was sie kaputt machen kann.
- Neuer Selbsttest „Sicherheits-Header prüfen“: eine echte Anfrage an die Startseite, um zu kontrollieren, welche Header wirklich in der Antwort ankommen. Das ist nützlich, wenn ein CDN oder ein vorgelagerter Reverse-Proxy sie unterwegs entfernt.
- Paranoic Hardening: neue automatische Abmeldung von Administratoren bei Inaktivität, standardmäßig aus. Der Timeout ist in Sekunden konfigurierbar (60-86400). Er wird im Browser gemessen (Maus, Tastatur, Scrollen, über Tabs geteilt), nicht serverseitig. So werden die automatischen Anfragen von WP Heartbeat nicht mit echter Aktivität verwechselt. Nach Ablauf des Timeouts wird die Sitzung mit wp_logout() wirklich beendet, nicht nur optisch umgeleitet.
Version 1.0.5
- Neuorganisation des Panels: neue eigene Reiter „Gesperrte IPs“ (mit clientseitigem JavaScript-Filter), „Hardening / IDS“ und „Test“ (Prüfung der PHP-Upload-Sperre + Integrität). Sie sind vom Reiter Allgemein getrennt.
Version 1.0.4
- Sperre der PHP-Ausführung in uploads: Jetzt sind auch die Endungen .phar/.phps/.pht abgedeckt. Vorher waren nur .php/.phpN/.phtml abgedeckt.
- Die Direktive php_admin_flag aus der Sperrregel entfernt. Auf PHP-FPM/CGI-Apache-Hosting lehnt Apache sie mit einem 500-Fehler auf der ganzen Seite ab. Require all denied allein genügt bereits.
- Einen Selbsttest im Panel hinzugefügt, um zu prüfen, dass die Sperre auf der Seite wirklich funktioniert. Man verlässt sich nicht mehr nur auf die gespeicherte Konfiguration.
Version 1.0.3
- Sicherheit: Eine unzureichende Validierung der vom Panel empfangenen IP-Adressen behoben. Eine manipulierte Antwort konnte beliebige Direktiven in die .htaccess der Seite einschleusen. Jetzt werden nur noch vollständige IP-Adressen und CIDRs akzeptiert, sowohl beim Empfang als auch als letzte Kontrolle vor dem Schreiben der Datei. Keine IP-Quelle kann sie mehr umgehen, auch lokale Übersteuerungen nicht.
- Sicherheit: Die Verbindung zum Panel erfordert jetzt https. Die Synchronisationsanfrage trägt den API-Schlüssel. Über http war er für jeden auf dem Netzwerkpfad lesbar. http bleibt nur zu lokalen Entwicklungshosts erlaubt.
- Sicherheit: Die Upload-Überwachung erkennt jetzt .user.ini, das unter PHP-FPM einer .htaccess entspricht. Sie erkennt auch SVG-Dateien und Namen, die mit Nullbytes oder angehängten Leerzeichen gebaut sind, um eine ausführbare Endung zu tarnen.
- Neue Zeilenobergrenze des Aktivitätsprotokolls, standardmäßig 500 und konfigurierbar unter Einstellungen > Aktivitätsprotokoll. Sie begrenzt den vom Protokoll belegten Speicherplatz. Das Protokoll wächst auch durch nicht authentifizierte Anfragen (fehlgeschlagene Logins, Kommentare, Dateiübermittlungen). Beim Erhöhen der Grenze warnt die Seite vor dem höheren Verbrauch.
- Einen Fehler behoben, bei dem die Aufbewahrung nie etwas löschte, wenn das Aktivitätsprotokoll eingeschaltet, aber kein Panel konfiguriert war. Die Zeilen warteten auf eine Übermittlung an einen nicht existierenden Empfänger. Die Tabelle wuchs unbegrenzt.
- Eigene Pfade der Härtungsregeln werden jetzt vor dem Schreiben bereinigt. Anführungszeichen und Steuerzeichen gelangen nie in die .htaccess, die sonst ungültig werden konnte. Zuvor wurde die Anpassung nicht ausreichend gefiltert. Ein falsch geschriebener Pfad konnte die Seite unerreichbar machen. Wir haben uns entschieden, diese Zeichen beim Schreiben der Regel stillschweigend zu verwerfen, um den Benutzer vor Fehlern zu schützen. Im Feld bleiben sie wie eingegeben, haben aber keine Wirkung.
Version 1.0.2
- Neuer Abschnitt „Benutzerregistrierung“ (Einstellungen): drei Richtlinien zur Begrenzung der Anlage neuer WordPress-Benutzer. Die Richtlinien lauten: keine Einschränkung, nur Rollen mit geringen Rechten oder Registrierung ganz ausgeschlossen. Mit Rollen mit geringen Rechten werden nie administrator, editor, author oder shop_manager angelegt. Das wird immer durchgesetzt, auch bei einem Konfigurationsfehler. Sie ist STANDARDMÄSSIG AKTIV mit „nur Rollen mit geringen Rechten“: Rollen mit hohen Rechten sind schon direkt nach der Installation gesperrt, ohne Konfiguration. Die Richtlinie deckt wp-admin, die REST-API, XML-RPC, WP-CLI und direkte Aufrufe von Plugins/Themes Dritter ab. Sie nutzt den zentralen WordPress-Filter, den jeder Weg der Benutzeranlage durchläuft. Dazu kommt ein Sicherheitsnetz: Es entzieht einem Konto, das bei aktiver Richtlinie angelegt wurde, sofort die Rechte, auf welchem Weg es auch hereinkam.
Version 1.0.1
- Aufräumen des Readme: Der Changelog führt nur die im offiziellen Repository veröffentlichten Versionen auf.
Version 1.0.0
- Erste öffentliche Version.
- Login-Schutz: Erkennung fehlgeschlagener Versuche, lokale Sperre lästiger IPs in .htaccess, Whitelist und manuelles Entsperren in den Einstellungen.
- Cisilino-Netzwerk: optionaler Austausch eines Digests feindlicher IPs mit dem Panel und mit den anderen Seiten des Netzwerks. Er ist ausgeschaltet, bis die Verbindung konfiguriert ist.
- Aktivitätsprotokoll: Die relevanten Ereignisse der Seite werden lokal mit konfigurierbarer Aufbewahrung erfasst. Das sind Logins, Benutzer, Inhalte, Plugins, Themes, Core, Optionen, Medien und Uploads. Sie werden gleich nach dem Ereignis an das Panel gesendet, ohne die ausgelieferte Seite zu verlangsamen.
- Integritätsprüfung: Das Plugin vergleicht die MD5-Hashes seiner eigenen Dateien mit dem mit dem Release ausgelieferten Manifest. Es meldet geänderte, fehlende oder unerwartete Dateien in seinem eigenen Ordner.
- Upload-Überwachung: Sie erfasst Dateien, die auf die Seite gelangen, auch außerhalb der Mediathek. Sie erkennt ausführbare Endungen, auch doppelte wie image.php.jpg, und kann sie ablehnen.
- Optionale Härtungen, alle standardmäßig ausgeschaltet.
Versionen vor 1.0.0 wurden nie öffentlich verteilt. Für die Funktionen im Detail beginnen Sie mit dem Einführungsartikel zum Plugin.