v1.7.7

Externes Sicherheits-Audit + GPL-Switch

Vollstä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 ABSPATH mö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) und index.php-404 zusätzlich zu .htaccess. Schützt auch Nginx-Hosts.
  • Zip-Slip / Zip-Bomb / Symlink-Schutz via neue Klasse ZipSafe in 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_equals bevor 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üfte BKSRSV → eigene verschlüsselte Backups wurden beim Import abgewiesen. Behoben durch gemeinsame Encryption::is_known_magic()-Quelle.
  • Versions-Inkonsistenz: Plugin-Header zeigte 1.7.7, readme.txt Stable 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 in boot()-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.

v1.7.0 – v1.7.6

Großes Feature-Release

Aus dem 36-Layer-Stack wird der 60+-Layer-Stack. 27 neue Features in drei thematischen Wellen — Recovery & Resilience (Layer 38–47), Sichtbarkeit & Diagnose (48–55), UX & Polish (56–63). Plus harte Bugfixes bei Race-Conditions im Backup-Pipeline.

Welle 1 — Recovery & Resilience (Layer 37–47)

  • ⬆️ Layer 37 · Backup-Import. ZIP direkt aus dem Browser hochladen — kein FTP nötig.
  • 🤖 Layer 38 · Auto-Heal. Anomaly-Detection findet Hack-Verdacht → automatisch letztes sauberes Backup zurückspielen (Cooldown gegen Loops).
  • 📈 Layer 39 · Speicher-Prognose. Lineare Regression auf Backup-Größen → „in 23 Tagen ist dein Speicher voll".
  • 🔍 Layer 40 · Drift-Detection. „Seit letztem Backup: +12 Posts, +3 Plugin-Files, +1 Admin" — Hack-Frühwarnung.
  • 📄 Layer 41 · Disaster-Recovery-Dokument. Druckbares HTML mit allen Restore-Infos für Off-site-Aufbewahrung.
  • 🔮 Layer 42 · Pre-Backup-Estimate. Vor Klick: „240 MB · 3:24 min · braucht 510 MB frei".
  • 🔗 Layer 43 · Magic-Restore-Link. Signierte Token-URL pro Backup. Kunde restored ohne WP-Login. Single-use, 24h-Expiry.
  • 🪞 Layer 44 · Dedupe. Findet praktisch-identische Backups (gleiche Files-Count + Größen-Cluster). Spart 50–80 % Storage.
  • 🕵️ Layer 45 · Hack-Forensik-Timeline. Walkt letzte 10 Backups, findet wann zusätzlicher Admin / PHP in /uploads erschien.
  • 🚧 Layer 46 · Maintenance-Mode während Backup. Verhindert inkonsistente DB-Dumps bei laufenden Bestellungen.
  • Layer 47 · Webhook-Trigger. GitHub-Action / CI/CD triggert Backup per HMAC-signierter REST-Route.

Welle 2 — Sichtbarkeit & Diagnose (Layer 48–55)

  • Layer 48 · WP-Cron-Replacement-Helper. Heartbeat-Tracking + copy-pasteable System-Cron-Snippets.
  • 🧙 Layer 49 · Restore-Symptom-Wizard. Quiz „Was ist kaputt?" → empfiehlt das passende Backup mit Begründung.
  • 📦 Layer 50 · Plugin-/Theme-Inventory-Diff. Vor Restore: was wird entfernt / wiederinstalliert / downgraded.
  • ⛓️ Layer 51 · Audit-Log Hash-Chain. Tamper-evident Event-Log mit SHA-256 Hash-Chain. Compliance: ISO 27001, SOC 2, DORA.
  • 🦮 Layer 52 · Backup-Watchdog. Eskalierende Email-Cadence bei Failed-Streaks + persistenter sitewide Admin-Banner.
  • 🛡 Layer 53 · GDPR-Anonymizer. Erzeugt „anon-…"-Variante mit pseudonymisierten PII. Sicher zum Sharing.
  • 📤 Layer 54 · Multi-Site-Push. 1 Backup → N Remote-Sites in einem Klick. Killer für Agenturen.
  • Layer 55 · Restore-Conflict-Detection. „Restore würde 47 Bestellungen verlieren" BEVOR du klickst.

Welle 3 — UX & Polish (Layer 56–63)

  • 🟢 Layer 56 · Admin-Bar-Status-Pill. „Backsta ✓ OK / ⚠ Warn / ✕ Crit" sichtbar auf jeder WP-Admin-Seite.
  • 📺 Layer 57 · Live-Backup-Stream. Real-time aktueller Task, Datei-Cursor, Tempo (Files/s) während Backup läuft.
  • 🏷 Layer 58 · Smart-Backup-Naming. Statt cryptic Timestamps automatisch before-woocommerce-9.5.zip.
  • 🚦 Layer 59 · Bandwidth-Throttle. Cloud-Upload-Limit verhindert dass Backup Live-Traffic stranguliert.
  • 🕰 Layer 60 · Time-Machine-Slider. Visueller Drag-Slider entlang Backup-Historie mit Live-Preview.
  • 🔐 Layer 61 · 2FA-Guard. TOTP-Code für Restore/Löschen/Anonymize/Push. Schützt übernommene Sessions.
  • 🌐 Layer 62 · Public Status-Page. Tokenisierte readonly URL für Kunden-Vorzeige ohne WP-Login.
  • 🪄 Layer 63 · Smart-Exclude. Findet große wertlose Tabellen (Transients, Wordfence-Blocks, Logs). Reduziert Backup-Größe oft um 50–90 %.

Härtungen & Bugfixes

  • Per-Job File-Lock in tick_one() verhindert Race zwischen WP-Cron und AJAX-Status-Polling — der Bug der 192 KB DB-Dumps in 24-Tabellen-Backups produzierte.
  • Job-Lock in start_now(): parallele Jobs werden zusammengeführt statt geschreddert.
  • DB-Dump End-of-File-Marker-Validation — abgebrochene Dumps fliegen nicht mehr durch.
  • Final-ZIP-Validation: < 1 KB werden gelöscht statt persistiert (verhindert 579-Byte-Geister-Backups).
  • Hook-Subscriber-Crashes können Backup nicht mehr nachträglich „failed" markieren.
  • Anomaly-Detection ignoriert Incremental-Backups (waren legitim klein, falsche Alarme).

v1.6.0 – v1.6.2

Diagnose-Welle

Acht neue Diagnose- und Sichtbarkeits-Layer (48–55). Plus aufgeräumte Tab-Navigation und schöneres Backup-Profil-Formular mit Google-Drive-Auswahl.

Neue Layer

  • Layer 48 · WP-Cron-Replacement-Helper. Heartbeat-Tracking + copy-pasteable System-Cron-Snippets.
  • 🧙 Layer 49 · Restore-Symptom-Wizard. Quiz „Was ist kaputt?" → empfiehlt das passende Backup.
  • 📦 Layer 50 · Plugin-/Theme-Inventory-Diff. Vor Restore: was wird entfernt / wiederinstalliert / downgraded.
  • ⛓️ Layer 51 · Audit-Log Hash-Chain. Tamper-evident Event-Log. Compliance: ISO 27001, SOC 2, DORA.
  • 🦮 Layer 52 · Backup-Watchdog. Eskalierende Email + sitewide Admin-Banner bei Failed-Streaks.
  • 🛡 Layer 53 · GDPR-Anonymizer. „anon-…"-Backup mit pseudonymisierten PII. Sicher zum Sharing.
  • 📤 Layer 54 · Multi-Site-Push. 1 Backup → N Remote-Sites in einem Klick.
  • Layer 55 · Restore-Conflict-Detection. „Restore würde 47 Bestellungen verlieren" BEVOR du klickst.

UX & Polish

  • Tabs neu sortiert: Aktion → Status → Konfiguration → System (statt alphabetisch).
  • Backup-Profil-Formular komplett neu — Sektionen, Toggle für „Aktiv", Checkbox-Karten für Ziele mit Verfügbarkeits-Anzeige.
  • Anonymisierte Backups (anon-…) sind jetzt in der Backup-Liste sichtbar mit Schutz-Badge.

v1.5.0 – v1.5.1

Recovery-Welle

Elf neue Recovery- und Resilience-Layer (37–47). Aus dem 36-Layer-Stack wird der 47-Layer-Stack.

  • ⬆️ Layer 37 · Backup-Import. ZIP direkt aus dem Browser hochladen — kein FTP nötig.
  • 🤖 Layer 38 · Auto-Heal. Anomaly-Detection findet Hack-Verdacht → automatisch letztes sauberes Backup.
  • 📈 Layer 39 · Speicher-Prognose. Lineare Regression → „in 23 Tagen ist dein Speicher voll".
  • 🔍 Layer 40 · Drift-Detection. „Seit letztem Backup: +12 Posts, +1 Admin" — Hack-Frühwarnung.
  • 📄 Layer 41 · Disaster-Recovery-Dokument. Druckbares HTML mit allen Restore-Infos für Off-site.
  • 🔮 Layer 42 · Pre-Backup-Estimate. Vor Klick: „240 MB · 3:24 min · braucht 510 MB frei".
  • 🔗 Layer 43 · Magic-Restore-Link. Signierte Token-URL — Kunde restored ohne WP-Login.
  • 🪞 Layer 44 · Dedupe. Findet praktisch-identische Backups, spart 50–80 % Storage.
  • 🕵️ Layer 45 · Hack-Forensik-Timeline. Findet wann zusätzlicher Admin / PHP in /uploads erschien.
  • 🚧 Layer 46 · Maintenance-Mode während Backup. Verhindert inkonsistente DB-Dumps bei laufenden Bestellungen.
  • Layer 47 · Webhook-Trigger. GitHub-Action / CI/CD triggert Backup per HMAC-signierter REST.

v1.4.0 – v1.4.4

Quality & Cleanup

Quality-Pass: kritische Bugfixes im Download- und Restore-Pfad, plus Aufräumen des Layer-Stacks. Health Score (Layer 19) und Backup Calendar (Layer 30) entfernt — die ergaben mit den neuen Status-/Watchdog-Cards keinen eigenen Mehrwert mehr.

  • Backup-Download über admin-post.php mit Capability + Per-File-Nonce statt direkter wp-content-URL (war 403, weil Backups per .htaccess geblockt sind).
  • Importierte Backups (imported-…zip) tauchen jetzt in der Liste auf — vorher von 16 Code-Pfaden geblockt weil das Pattern „backsta-…" hartcodiert war.
  • Staging-Erstellung erlaubt explizite Auswahl des Quell-Backups statt immer „letztes".

v1.3.0

Pro Tooling

Sechs neue Layer (31–36) für anspruchsvolle Setups: DB-Optimization vor Backup, Cold-Storage-Tiering in S3, native Chat-Notifications, Auto-Recovery on Site-Down und Granular Role Permissions.

  • 🧹 Layer 31 · Pre-Backup DB Optimization. Räumt Revisions, Auto-Drafts, Spam, expired Transients vor jedem Backup.
  • 🧊 Layer 32 · Cold-Storage-Tiering. Alte S3-Backups automatisch nach STANDARD_IA → GLACIER → DEEP_ARCHIVE verschieben. Spart 60–90 % Cloud-Kosten.
  • 🧩 Layer 33 · Pre/Post-Backup-Hooks. WP-Action-Hook, Webhook-URL, optional Shell-Command (gated via wp-config).
  • 💬 Layer 34 · Chat-Notifications. Native Slack-Blocks, Discord-Embeds, Teams-MessageCards.
  • 🚑 Layer 35 · Auto-Recovery on Site-Down. Externes Monitoring meldet 5xx → automatischer Restore mit 30-min-Cooldown.
  • 🛂 Layer 36 · Granular Role Permissions. Custom-Caps: Editor darf z.B. nur Backups starten + Logs lesen, Restore bleibt Admin.

v1.2.0

Operations & Trust

Elf neue Layer (19–29) für Trust, Recovery und Operations. Shamir Key Recovery, Anomaly Detection, Immutable Storage, Webhook-Triggered Restore — plus Backup-Profile, SQL-Diff, Restore-Time-Estimator und mehr.

  • 🗝️ Layer 20 · Shamir Key Recovery. Encryption-Key in 5 Splits aufteilen — 3 davon reichen zum Wiederherstellen.
  • 📊 Layer 21 · Anomaly Detection. Frühwarnung bei plötzlicher Größen-/File-Count-Explosion (Hack-Signal).
  • 🩺 Layer 22 · Pre-Restore Compatibility-Check. PHP-/WP-/MySQL-Version des Backups gegen Live-Site prüfen.
  • 🔒 Layer 23 · Immutable Storage / WORM-Lock. S3-Object-Lock — Ransomware kann Backups nicht überschreiben.
  • 🪝 Layer 24 · Webhook-Triggered Restore. Externes Tool kann gepinnte Backups via REST-Endpoint restoren.
  • Layer 25 · Restore Time Estimator. „Restore wird ~4 min dauern" basierend auf vergangenen Restores.
  • 📐 Layer 26 · SQL-Diff zwischen Backups. Welche Tabellen-Rows sind seit Backup A zu Backup B neu/geändert/weg?
  • 🎚 Layer 27 · Backup-Profile. Mehrere parallele Strategien: „Daily DB → S3" + „Weekly Full → S3+GDrive".
  • ⬇️ Layer 28 · Direct-Restore aus Cloud. Restore direkt von S3/FTP/Drive ohne Local-Download.
  • 📝 Layer 29 · Per-Backup Notes & Tags. „before-shop-migration", „after-theme-update" — pro Backup notieren und filtern.

v1.1.0

Großes Feature-Release

Sechs neue Layer (13–18), One-Click-Cloud-Connect, dutzend Quality-of-Life-Fixes. Aus dem 12-Layer-Stack wird der 18-Layer-Stack.

Neue Layer

  • 📁 Layer 13 · File-Browser & Single-File Recovery. Tree-View durch jedes Backup. Einzelne Datei vorschauen (Source-Highlight), runterladen oder gezielt zurückspielen — ohne den Rest des Backups anzufassen.
  • Layer 14 · Pre-Restore Safety-Snapshot. Vor jedem Restore wird automatisch ein 24h-Sicherheits-Snapshot erstellt. Bei Problemen: ein Klick zurück zum Vor-Restore-Stand.
  • 🌐 Layer 15 · Multi-Destination (3-2-1). Parallel-Replikation zu bis zu vier Zielen (Local + S3 + FTP + Google Drive). Klassische 3-2-1-Regel automatisiert.
  • 🧬 Layer 16 · Backup Comparison. Zwei beliebige Backups Seite-an-Seite vergleichen. Welche Files sind neu? Welche Tabellen sind gewachsen?
  • 🧠 Layer 17 · Smart Schedule. Lernt automatisch das Low-Traffic-Fenster deiner Site (basierend auf Insyta-Daten oder Server-Load) und schiebt Backups dorthin.
  • 🔬 Layer 18 · File Forensics. Index aller Files über alle Backups: NEW / MODIFIED / STABLE / DELETED. Erkennt Hot-Spots = potenzieller Hacker-Verdacht.

Onboarding

  • 🔌 One-Click-Cloud-Connect für Google Drive. Kein Google-Cloud-Project, keine OAuth-Credentials, keine Redirect-URI mehr nötig. Backsta-OAuth-Hub auf backsta.io übernimmt den Tanz. Klassischer Self-Hosted-Modus bleibt für Power-User verfügbar.

Fixes

  • 🕐 Zeit-Zonen: Backup-Zeitstempel und Schedule-Berechnung respektieren jetzt die WordPress-Zeitzone (vorher UTC).
  • 🔍 Selective-Restore: Live-Suche und Bulk-Select für Tabellen/Files (vorher unbenutzbar bei 1000+ Einträgen).
  • 🗂️ Versions-Archiv: ZIP-Upload-Overwrite triggert jetzt korrekt das Archiv (vorher: „0 Versionen" trotz Theme-Upload).
  • 📧 Notify-Diagnostik: Log der letzten 20 Mail-/Webhook-Versuche mit Status & Fehlertext direkt im Notify-Tab. Plus „Mails kommen nicht an?"-Hinweis mit SMTP-Plugin-Empfehlungen.
  • 🚀 Staging-Diagnose: 4-Punkt-Health-Check pro Staging-Umgebung mit Auto-Repair-Button. Behebt das häufige „Staging-URL gibt 404"-Problem.
  • 📝 Versions-Archiv: HTML-Tags in Beschreibungstext werden jetzt korrekt gerendert (vorher als Plain-Text dargestellt).

v1.0.0

Erste stabile Version

Initial Public Release nach 6-monatiger Closed Beta. 12 Backup-Stack-Layer komplett implementiert.

  • 📦 Backup (DB + Files) mit Inkrementell- und Differential-Modus.
  • 🛡️ Pre-Update Auto-Backup mit Live-Progress-Bar direkt auf der WP-Update-Seite.
  • 🗂️ Versions-Archiv (Plugin/Theme-Rollback nach Versionsnummer).
  • 🔬 Restore Self-Test (wöchentlicher Dry-Run gegen ein Sandbox-Schema).
  • 🔍 Backup Re-Verify (sha256 + ZIP-Konsistenz über alle Backups).
  • 🎯 Selective Restore (einzelne Tabellen/Files cherry-picken).
  • 🔀 Diff-Restore (Backup A vs. Backup B, nur Delta applyen).
  • 🔐 GPG/HMAC-Signatur (detached .asc oder .hmac, Compliance-tauglich).
  • 🚀 Push-to-Staging (isolierter Tabellen-Prefix, eigene URL).
  • 🔄 Transfer Resume (S3/FTP-Resume bei Connection-Drop).
  • ✋ Two-Step Restore Confirmation (E-Mail-Bestätigungs-Link).
  • ☁️ Cloud-only Mode (Stream direkt nach S3/FTP/GDrive ohne lokale Disk).
  • 📜 DSGVO-konforme Logs, Audit-Trail.
  • 🇩🇪 Multilingual: DE / EN.

v0.9 — Beta

Closed Beta
  • 👥 Closed Beta mit ~30 ausgewählten Agenturen.
  • 📊 Performance-Optimierungen für große Sites (5–50 GB).
  • 🐛 ~40 Bugfixes basierend auf Beta-Feedback.

Feature-Wünsche und Bug-Reports an support@backsta.io.