v1.7.7
Externes Sicherheits-Audit + GPL-SwitchVollständiger Sicherheits-, Funktions- und Code-Audit. Alle Befunde behoben. Lizenz auf GPL v2+ umgestellt (WordPress.org-Repository-konform). Die ~84 Layer wurden in drei Reife-Stufen klassifiziert: 39 Stable, 39 Beta, 6 Labs (default unsichtbar, opt-in im Sicherheit-Tab → Erweitert).
🛡 Sicherheit (kritisch / hoch)
- Path-Traversal im File-Browser-Restore behoben — präparierte Entry-Namen konnten den realpath-Check umgehen, Schreibzugriff außerhalb von
ABSPATHmöglich. - SSRF im Multi-Push-Receiver gestopft — pull_url wird jetzt gegen private/loopback/link-local-IPs (v4+v6) und nicht-https-Schemata validiert.
- Backup-Verzeichnis-Schutz: Random-Filename-Suffix von 6 → 24 Zeichen (62²⁴ Brute-Force-resistent), plus
web.config(IIS) undindex.php-404 zusätzlich zu.htaccess. Schützt auch Nginx-Hosts. - Zip-Slip / Zip-Bomb / Symlink-Schutz via neue Klasse
ZipSafein jedem Extract-Pfad (Restore, Anonymizer, File-Browser). - DOM-XSS aus Backup-Inhalten (importierte Backups konnten Cross-Admin-XSS triggern) durch konsequentes Escapen aller innerHTML-Sinks behoben.
- PBKDF2-Iterationen auf 600 000 (NIST/OWASP 2024+) angehoben. Legacy-RES1-Pfad bleibt mit 200 000 für Backwards-Compat.
- SHA-256-Verify beim Backup-Import: optionaler "Erwarteter SHA-256" beim Upload-Form, Server verifiziert via
hash_equalsbevor die Datei angefasst wird. Wire-Tampering und Korruption werden erkannt. Hash-Chip in der Backup-Liste mit Click-to-Copy. - Content-Disposition Header-Injection behoben: RFC-5987 mit ASCII-Fallback + UTF-8-encoded Variante, plus
X-Content-Type-Options: nosniff.
🐛 Funktionale Regressionen (kritisch)
- 11 nicht-aktivierbare Killer-Features (Auto-Heal, Webhook-Trigger, 2FA-Guard, Watchdog, Bandwidth-Throttle, Maint-during-Backup, Magic-Link-TTL, Anonymizer-Rules) — Schema-Whitelist hatte die Keys nicht. Toggle erschien zu speichern, Wert wurde stillschweigend verworfen. Behoben.
- Encryption-Magic-Mismatch: Schreib-Pfad nutzte
RES1, Import-Magic-Byte-Check prüfteBKSRSV→ eigene verschlüsselte Backups wurden beim Import abgewiesen. Behoben durch gemeinsameEncryption::is_known_magic()-Quelle. - Versions-Inkonsistenz: Plugin-Header zeigte 1.7.7,
readme.txtStable Tag 1.0.0. Synchronisiert plus neues Tooling (bin/sync-version.php) und CI-Gate damit das nicht mehr driftet. - Logs-Tab hing bei „Lade …" (und 12 weitere AJAX-Endpoints lautlos kaputt): Autoloader-Switch hatte file-bottom
add_action()-Calls nicht mehr eager geladen. Alle inboot()-Methoden gewandert, plus neuer Test der das Anti-Pattern verbietet.
🏗 Architektur-Aufräumen
- PSR-4-Autoloader ersetzt 95
require_once-Zeilen durch lazy class loading. - Encryption umgebaut auf Streaming (RES2-Format, chunked AES-256-GCM mit Per-Chunk-AAD): skaliert jetzt auf 25-GB-Backups statt OOM bei ~256 MB. Alte RES1-Backups bleiben entschlüsselbar.
- class-admin.php 2097 → 909 LOC (-57 %): 6 große Tabs in dedizierte Klassen unter
includes/admin/class-tab-*.php. backsta.php 467 → 209 LOC (-55 %). - 113 Default-Settings zentralisiert in
SettingsSchema::defaults()— eine Quelle der Wahrheit. Tests verhindern Drift zwischen Defaults und Toggle-Whitelist.
🧪 Vertrauen / Distribution
- Lizenz: GPL v2+ (vorher Proprietary). Plugin ist jetzt WordPress.org-Repository-kompatibel und GPL-Compliance-konform.
- PHPUnit-Test-Suite mit 19 Tests / 38 Assertions: Encryption-Roundtrip + Tamper + Wrong-Password + Legacy-RES1, Zip-Slip-Schutz, Schema-Konsistenz, Autoloader-Coverage, Versions-Sync, Cross-Class-Method-Resolution.
- CI auf PHP 8.0 / 8.1 / 8.2 / 8.3 mit Lint + Versions-Check + PHPUnit. README, CONTRIBUTING, SECURITY (mit Audit-History), CHANGELOG.
- Feature-Registry mit Stable/Beta/Labs-Tier-System: 39 Stable, 39 Beta, 6 Labs (default unsichtbar). Toggle im Sicherheit-Tab → Erweitert.