Security Manager
Der Security Manager ist ein Core-Modul des Weinhold Frameworks und schützt alle Sites im Netzwerk vor Brute-Force-Angriffen und unerwünschten IPs. Er arbeitet still im Hintergrund und greift so früh wie möglich ein, teils schon bevor WordPress selbst reagiert.
Allgemein
IP-Blacklist
Bestimmte IP-Adressen können dauerhaft auf eine Sperrliste gesetzt werden. Anfragen von diesen IPs werden sofort mit 403 blockiert – noch bevor der WordPress-Login-Prozess startet.
Login-Lockout
Nach einer konfigurierbaren Anzahl fehlgeschlagener Login-Versuche wird die betreffende IP automatisch für einen festgelegten Zeitraum gesperrt (429, Wartezeit in der Fehlermeldung genannt). Besonders geschützte Benutzerkonten (z. B. Administratoren) bekommen zusätzlich eine eigene, strengere Sperre nach Benutzername statt nach IP.
Vertrauenswürdige IPs & Notfall-Zugang
Fest hinterlegte vertrauenswürdige IPs umgehen alle Sperren komplett. Zusätzlich gibt es einen Notfall-Token: ein per URL-Parameter übergebenes Geheimnis, das bei Übereinstimmung sämtliche Sperren für die aktuelle IP sowie alle geschützten Konten aufhebt und eine zehnminütige Vertrauens-Session setzt – gedacht für den Fall, dass man sich selbst ausgesperrt hat.
Administration & Protokollierung
Im Dashboard unter Weinhold → Security Manager können gesperrte IPs eingesehen, entsperrt oder dauerhaft blockiert werden. Alle Lockout-Ereignisse werden automatisch im Audit-Log protokolliert, sodass verdächtige Aktivitäten nachvollziehbar bleiben.
Dateien
modules/security_manager_core.php – einzige Datei des Moduls (Core-Modul, das _core.php-Suffix lädt es immer): Einstellungen, IP-Sperren, Lockout-Logik, Login-Hooks, Admin-Oberfläche.
Für Entwickler
Einstellungen (Option weinhold_security_settings)
Schlüssel Bedeutung lockout_threshold Fehlversuche bis zur IP-Sperre (Standard 5) lockout_duration Sperrdauer in Minuten (Standard 15) blacklist Dauerhaft gesperrte IP-Adressen trusted_ips IPs, die alle Sperren umgehen emergency_token Geheimnis für den Notfall-Zugang per URL-Parameter protected_users Zusätzlich geschützte Benutzernamen (Super-Admins sind bei Multisite automatisch geschützt) protected_threshold,protected_lockout_duration Strengere Schwelle/Dauer speziell für geschützte Konten lockout_ip_on_protected_fail Ob ein Fehlversuch bei einem geschützten Konto zusätzlich die IP sperrt disable_xmlrpc XML-RPC komplett deaktivieren (Standard an) Login-Flow (Hooks)
Hook Priorität Zweck init 0 weinhold_security_handle_emergency_token() – prüft den URL-Parameter wf_emergency und hebt bei Treffer alle Sperren auf init 1 weinhold_security_check_ip() – blockiert blacklistete/gesperrte IPs auf JEDEM Request, nicht nur beim Login login_init 1 weinhold_security_block_native_auth() – leitet wp-login.php-Aufrufe auf die eigenen Auth-Seiten des user_management-Moduls um login_init 2 weinhold_security_block_locked_login() – blockiert Login-POSTs gesperrter IPs, bevor WordPress die Zugangsdaten prüft login_init 3 weinhold_security_block_gateless_post() – blockiert Login-POSTs ohne gültiges Login-Gate-Cookie, falls das login_gate-Modul aktiv ist authenticate 30 weinhold_security_authenticate() – liefert WP_Error bei gesperrter IP oder gesperrtem geschütztem Konto wp_login_failed 10 weinhold_security_login_failed() – zählt Fehlversuche hoch, versendet Benachrichtigungs-Mails IP-Ermittlung
weinhold_security_get_client_ip() prüft der Reihe nach CF-Connecting-IP, X-Real-IP, X-Forwarded-For und REMOTE_ADDR und nimmt die erste gültige IP-Adresse – wichtig hinter Reverse-Proxy/CDN, damit nicht die Proxy-IP statt der echten Besucher-IP gesperrt wird.
Blacklist- und Lockout-Prüfung laufen bereits auf init mit Priorität 1, also auf JEDEM Seitenaufruf der ganzen Website, nicht nur beim Login – eine geblacklistete IP kommt gar nicht erst auf normale Seiten. Der Notfall-Token gibt nie einen Hinweis, ob er falsch war (stiller Fehlschlag) – verhindert, dass jemand per Trial-and-Error herausfindet, ob überhaupt ein Token konfiguriert ist. E-Mail-Adressen im Login-Feld werden vor der Sperrprüfung auf den echten Benutzernamen aufgelöst, damit Lockout-Zähler für „admin“ und „admin@example.com“ nicht getrennt gezählt werden. XML-RPC wird standardmäßig komplett deaktiviert (xmlrpc_enabled-Filter auf false) – ein häufiges Ziel für Brute-Force-Bots, das WordPress sonst parallel zum normalen Login offen lässt.Besonderheiten
Läuft parallel zum user_management-Modul: Beide Module leiten wp-login.php-Aufrufe auf die eigenen Auth-Seiten um (security_manager auf login_init, user_management ebenfalls) – bewusst redundant abgesichert, nicht als Bug zu verstehen.
Versionshistorie
Version Datum Änderung 1.0.0 22.09.2026 Einführung der Versionierung.