{"id":316373,"date":"2026-06-10T20:24:18","date_gmt":"2026-06-10T20:24:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bastora-security-audit\/"},"modified":"2026-06-30T10:01:56","modified_gmt":"2026-06-30T10:01:56","slug":"bastora-security-audit","status":"publish","type":"plugin","link":"https:\/\/fr-ca.wordpress.org\/plugins\/bastora-security-audit\/","author":22020153,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.5","stable_tag":"1.2.5","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Bastora Security Audit","header_author":"Bastora","header_description":"Honest 52-point security audit for WordPress. Hardens login, server configuration, version leaks and security headers without conflicts.","assets_banners_color":"c3c8c6","last_updated":"2026-06-30 10:01:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/bastora.de\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":287,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.2":{"tag":"0.2.2","author":"mathiasva","date":"2026-06-10 20:23:57"},"0.2.3":{"tag":"0.2.3","author":"mathiasva","date":"2026-06-10 21:17:06"},"0.2.4":{"tag":"0.2.4","author":"mathiasva","date":"2026-06-11 12:20:59"},"0.2.5":{"tag":"0.2.5","author":"mathiasva","date":"2026-06-11 12:37:00"},"0.2.6":{"tag":"0.2.6","author":"mathiasva","date":"2026-06-11 13:01:42"},"0.2.7":{"tag":"0.2.7","author":"mathiasva","date":"2026-06-11 19:11:54"},"0.2.9":{"tag":"0.2.9","author":"mathiasva","date":"2026-06-15 07:16:07"},"0.3.0":{"tag":"0.3.0","author":"mathiasva","date":"2026-06-22 11:06:42"},"1.2.5":{"tag":"1.2.5","author":"mathiasva","date":"2026-06-30 10:01:56"}},"upgrade_notice":{"1.2.5":"<p>Sieben Audit-Punkte sind ab jetzt mit \u201ePro-Feature&quot; gekennzeichnet, weil sie strukturell nur \u00fcber den Bastora-Schutz-Service mit MU-Plugin gel\u00f6st werden. Sie z\u00e4hlen im Score mit Gewicht null, der maximale Free-Score liegt unter 100. Klartext-Erkl\u00e4rung pro Punkt.<\/p>","1.2.4":"<p>WAF, Schadcode-Scanner und Aktivit\u00e4ts-Log werden erst beim Wizard scharf, nicht mehr beim Plugin-Activate. Audit-Score z\u00e4hlt jetzt \u201enicht pr\u00fcfbar&quot;-Punkte mit halbem Gewicht statt sie zu ignorieren (vorher konnte Score 100 trotz 48 ungepr\u00fcfter Punkte rauskommen). Werkstatt-Links ohne dezidierten Artikel werden weggelassen.<\/p>","1.2.3":"<p>Tested up to wieder auf 7.0. Audit-Punkte zugang.08 (E-Mail-Login) und monitor.03 (Captcha) pr\u00fcfen jetzt die korrekten Indikatoren statt semantisch leere Flag-Abfragen.<\/p>","1.2.2":"<p>Bugfix bei der Telemetrie-Option (Update-Versionen wurden nicht mit \u00fcbertragen). Quick-Action f\u00fcr Auto-Updates ohne 25-Sekunden-H\u00e4nger. \u201eTested up to&quot; auf 6.7 korrigiert. Texte aufger\u00e4umt: keine Architektur-Lecks, keine Negationen, \u201escharf schalten&quot; ist raus.<\/p>","1.2.1":"<p>Audit-Findings update.04 und update.05 (Plugin- und Theme-Auto-Updates) bekommen einen Quick-Action-Knopf. Ein Klick aktiviert die Filter f\u00fcr alle Plugins oder alle Themes. Werkstatt-Text pr\u00e4zisiert mit Child-Theme-Hinweis.<\/p>","1.2.0":"<p>Bastora-Sidebar radikal reduziert: Firewall, Verkehr &amp; Sperren, Aktivit\u00e4t, Datei-Inspektor sind als Submen\u00fcs entfernt. Es gibt nur noch Dashboard, H\u00e4rtung und Einstellungen. Die Funktionen laufen unver\u00e4ndert im Hintergrund, die Daten gehen in das anonyme 28-Tage-Aggregat. H\u00e4rtungs-Seite zeigt die sieben Wachen als kompakte Status-Karten.<\/p>","1.1.2":"<p>Dashboard-Texte f\u00fcr Schad-URL und Schwarm sind jetzt knapper und ohne Quellen-Nennung. Schwarm-Sperrliste wird serverseitig mit anerkannten Bad-IP-Quellen vorgef\u00fcllt, frische Installs starten ab dem ersten Pull mit substantieller Liste.<\/p>","1.1.1":"<p>Wizard-Loader zeigt jetzt alle 19 Schritte (13 Hardenings + 6 Hintergrund-Wachen) in derselben Choreografie. Dashboard-Karten Schad-URL und Schwarm haben ehrliche \u00dcbergangs-Texte. Kleiner Wording-Fix f\u00fcr KI-Bot-H\u00e4kchen.<\/p>","1.1.0":"<p>Gro\u00dfes Funktionsupdate: neuer Bot-Schutz mit vierstufiger Klassifikation (gut \/ schadhaft \/ KI \/ SEO), Reverse-DNS-Verifikation f\u00fcr Googlebot und Co., drei H\u00e4kchen in den Einstellungen mit Klartext-Erkl\u00e4rung. Wizard-Loader erweitert um sechs Hintergrund-Wachen (Bot-Schutz, WAF, Aktivit\u00e4ts-Log, Schadcode-Scanner, Kerndatei-Wache, Plugin\/Theme-Wache), alle in derselben AJAX-Choreografie. Telemetrie-Snapshot enth\u00e4lt jetzt 28-Tage-Aggregate aus WAF, Block-Rules, Brute-Force, Audit-Log und Bot-Log. Keine IPs, kein Event-Stream, alles aggregiert.<\/p>","1.0.7":"<p>Telemetrie sendet ab jetzt nur noch alle 28 Tage statt t\u00e4glich. Bestands-Installationen werden automatisch auf das neue Intervall umgestellt.<\/p>","1.0.6":"<p>Bugfix: Schwarm-Aktivierungs-Fehler zeigen jetzt eine klare rote Notice statt einer falschen gr\u00fcnen \u201eGespeichert&quot;-Meldung. H\u00e4kchen bleibt sichtbar, wenn die Server-Registrierung gerade scheitert.<\/p>","1.0.5":"<p>Pflege-Release zu 1.0.4: Atomarer Lock f\u00fcr Auto-Repair-Hintergrund-Jobs (race-frei gegen parallele Cron-Trigger). Transparenz-Hinweis zur Telemetrie-Eindeutigkeit in der readme.<\/p>","1.0.4":"<p>Pflege-Release zu 1.0.3: Bugfix bei Sucuri-Pro-Erkennung (Free wurde f\u00e4lschlich als Pro markiert), Telemetrie-Aggregat-Queries reduziert, Send-Timeout entspannt, External-Services-Doku erg\u00e4nzt.<\/p>","1.0.3":"<p>Bei aktiviertem Telemetrie-H\u00e4kchen werden ab jetzt zus\u00e4tzlich Plugin\/Theme-Autor, neueste verf\u00fcgbare Version, Update-Status, WP-Core-Update-Status, anonymer Hosting-Provider-Slug, Audit-Status pro Pr\u00fcfpunkt, erkannte Sicherheits-Plugins (free\/Pro) und Bastora-H\u00e4rtungs-Status \u00fcbertragen. Domain, IP und Benutzer-Daten gehen weiter NICHT raus.<\/p>","1.0.2":"<p>Pflege-Release zu 1.0.1: Activation-Redirect bleibt jetzt 5 Minuten lang scharf statt 30 Sekunden, Telemetrie-Body wird auf 150 Plugins + 50 Themes gekappt (verhindert 413-Antworten), und die Endpoint-Migration auf www.bastora.de r\u00e4umt jetzt die Datenbank einmalig auf statt bei jedem Aufruf nachzuschneiden.<\/p>","1.0.1":"<p>Pflicht-Update, wenn Du Schwarm-Schutz, Pwned-Passwort-Check oder Telemetrie nutzt: die Server-Endpoints auf www.bastora.de werden jetzt direkt angesprochen, der bisherige 301-Redirect von der Bare-Domain hatte POST-Requests in GET verwandelt. Plus: nach Aktivierung kommst Du automatisch in den Wizard, Telemetrie sammelt jetzt deutlich detaillierter, Dashboard zeigt Status-Karten der Hintergrund-Wachen direkt unter dem Score.<\/p>","1.0.0":"<p>Gro\u00dfes Funktionsupdate: lokale Firewall, Schadcode-Scanner f\u00fcr Themes und Uploads, URL-Reputation in Posts\/Kommentaren, eigenes Vier-Schichten-Captcha (Honeypot + Time-Trap + JavaScript-Proof-of-Work + Math-Fallback), persistente Sperrliste mit IP\/CIDR\/Hostname\/UA\/Referrer und Live-Traffic-Log f\u00fcr Sicherheits-Events. Optionaler Pwned-Passwords-Abgleich gegen den eigenen Bastora-Proxy auf deutschem Hoster (k-Anonymity). Punktezahl w\u00e4chst von 55 auf 58.<\/p>","0.4.0":"<p>Plugin- und Theme-Wache: Bastora gleicht ab jetzt t\u00e4glich alle installierten Plugins und Themes gegen das offizielle Original im WordPress.org-Repository ab und meldet ver\u00e4nderte oder fehlende Dateien per Admin-Mail. Punktezahl steigt von 53 auf 55. Quellen ausschlie\u00dflich offiziell von wordpress.org, kein Aufruf an kommerzielle Dritt-APIs.<\/p>","0.3.0":"<p>Neuer Bastora-Schwarm: Brute-Force-Angreifer werden anonym zwischen teilnehmenden Sites geteilt, IPs werden vorbeugend gesperrt. Vollst\u00e4ndig opt-in im Wizard und unter Einstellungen. Versendet werden nur Angreifer-IP, Angriffs-Typ und ein anonymer Token, keine Domain, keine Besucher-IPs.<\/p>","0.2.9":"<p>Code-Review-Pass nach der Berichts-Entfernung. Doc-Kommentar zur Kategorien-Reihenfolge pr\u00e4zisiert.<\/p>","0.2.8":"<p>Der druckbare HTML-Bericht ist raus. Das Scan-Ergebnis bleibt als interaktive Audit-Liste im Dashboard erhalten. Den vollst\u00e4ndigen, gedruckten Sicherheitsbericht gibt es im Bastora-Schutz-Service.<\/p>","0.2.7":"<p>Dashboard ist jetzt interaktiv: Status-Kacheln filtern die Audit-Liste, jeder Punkt verlinkt zur passenden Werkstatt-Anleitung auf bastora.de. Neuer Klartext-Hinweis erkl\u00e4rt, warum manche Server-Punkte nicht im Plugin gel\u00f6st werden k\u00f6nnen. Wizard-H\u00e4kchen einheitlich \u201eVersions-Abgleich erlauben&quot;.<\/p>","0.2.6":"<p>Bugfix-Release zu 0.2.5: der Sofort-Trigger nach manuellem Scan und der Cron-Anlauf auf stillen Plugin-Updates funktionieren jetzt zuverl\u00e4ssig. Neuer Admin-Block \u201eKerndatei-Wache&quot; in den Einstellungen.<\/p>","0.2.5":"<p>Manipulierte WordPress-Kerndateien werden ab jetzt automatisch repariert. T\u00e4glicher Hintergrund-Cron l\u00e4dt die saubere Originaldatei aus der offiziellen WordPress-ZIP, doppelte Hash-Validierung vor dem Ersetzen, Original wandert in Quarant\u00e4ne. Admin-Mail nach jedem Repair-Lauf. Voraussetzung ist der Versions-Abgleich-Opt-in.<\/p>","0.2.4":"<p>Neuer Audit-Punkt: Abgleich der WordPress-Kerndateien gegen das offizielle Original von wordpress.org. Erkennt manipulierte und fehlende Kerndateien, typisches Symptom f\u00fcr eingeschleusten Schadcode. Voraussetzung ist der Versions-Abgleich-Opt-in (gleiche Checkbox wie f\u00fcr die Update-Pr\u00fcfpunkte).<\/p>","0.2.3":"<p>Plugin-Beschreibung und Plugin-Listing-Seite auf wordpress.org auf Deutsch \u00fcbersetzt. Screenshots-Sektion mit vier Bildern wieder aufgenommen.<\/p>","0.2.2":"<p>Plugin Review Team feedback: all paid-tier markers removed from code, UI and report. Wizard is now three steps. Marker constant for the conflict-check renamed to a neutral name.<\/p>","0.2.1":"<p>Vorbereitung f\u00fcr die Einreichung im WordPress-Plugin-Verzeichnis: Plugin-Name, Donate-Link und Screenshots-Sektion bereinigt.<\/p>","0.2.0":"<p>Neuer Onboarding-Wizard mit vier Schritten plus echtem Vorher-Nachher-Vergleich. H\u00e4rtungen werden erst nach Klick scharf geschaltet, das Plugin misst vorher nur.<\/p>","0.1.6":"<p>Plugin Review Team-Feedback: doppelte URI im Header entfernt.<\/p>","0.1.5":"<p>Plugin Review Team-Vorbereitung: Inline-<code>onclick<\/code>\/<code>style<\/code>\/<code>base64<\/code>-SVG durchg\u00e4ngig in enqueued Assets bzw. Dashicons ausgelagert; POST-Sanitization geh\u00e4rtet.<\/p>","0.1.4":"<p>Plugin Review Team feedback: unn\u00f6tiges <code>require_once<\/code> von <code>wp-admin\/includes\/plugin.php<\/code> im Konflikt-Check entfernt.<\/p>","0.1.3":"<p>Konflikt-Check erkennt jetzt auch MU-Plugin-basierte Sicherheits-Schichten, verhindert Filter-Doppelung und Whitelabel-Br\u00fcche.<\/p>","0.1.2":"<p>External calls to api.wordpress.org are now opt-in by default, review your settings after upgrade if you rely on the update-related audit points.<\/p>","0.1.1":"<p>Plugin Review Team feedback: text domain alignment, CSS enqueue, contributors fix.<\/p>","0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3568084,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3568084,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3568084,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3568084,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.2","0.2.3","0.2.4","0.2.5","0.2.6","0.2.7","0.2.9","0.3.0","1.2.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3568084,"resolution":"1","location":"assets","locale":"","width":1280,"height":720},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3568084,"resolution":"2","location":"assets","locale":"","width":1280,"height":720},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3568084,"resolution":"3","location":"assets","locale":"","width":1280,"height":720},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3568084,"resolution":"4","location":"assets","locale":"","width":1280,"height":720}},"screenshots":{"1":"Der erste Scan startet, Bastora pr\u00fcft 58 Sicherheitspunkte in etwa 25 Sekunden.","2":"Ergebnis des ersten Scans: Score plus klare Aufteilung in bestanden, Hinweise und offene Punkte.","3":"Bastora schaltet die H\u00e4rtungen scharf, wo ein anderes Sicherheits-Plugin schon zust\u00e4ndig ist, l\u00e4sst Bastora die Hand davon.","4":"Das Dashboard nach Aktivierung: aktueller Sicherheits-Score und jeder Pr\u00fcfpunkt mit Klartext-Erkl\u00e4rung."}},"plugin_section":[],"plugin_tags":[2439,1174,31093,1184,600],"plugin_category":[38,54],"plugin_contributors":[266569],"plugin_business_model":[],"class_list":["post-316373","plugin","type-plugin","status-publish","hentry","plugin_tags-brute-force","plugin_tags-firewall","plugin_tags-hardening","plugin_tags-malware","plugin_tags-security","plugin_category-authentication","plugin_category-security-and-spam-protection","plugin_contributors-mathiasva","plugin_committers-mathiasva"],"banners":{"banner":"https:\/\/ps.w.org\/bastora-security-audit\/assets\/banner-772x250.png?rev=3568084","banner_2x":"https:\/\/ps.w.org\/bastora-security-audit\/assets\/banner-1544x500.png?rev=3568084","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bastora-security-audit\/assets\/icon-128x128.png?rev=3568084","icon_2x":"https:\/\/ps.w.org\/bastora-security-audit\/assets\/icon-256x256.png?rev=3568084","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bastora-security-audit\/assets\/screenshot-1.png?rev=3568084","caption":"Der erste Scan startet, Bastora pr\u00fcft 58 Sicherheitspunkte in etwa 25 Sekunden."},{"src":"https:\/\/ps.w.org\/bastora-security-audit\/assets\/screenshot-2.png?rev=3568084","caption":"Ergebnis des ersten Scans: Score plus klare Aufteilung in bestanden, Hinweise und offene Punkte."},{"src":"https:\/\/ps.w.org\/bastora-security-audit\/assets\/screenshot-3.png?rev=3568084","caption":"Bastora schaltet die H\u00e4rtungen scharf, wo ein anderes Sicherheits-Plugin schon zust\u00e4ndig ist, l\u00e4sst Bastora die Hand davon."},{"src":"https:\/\/ps.w.org\/bastora-security-audit\/assets\/screenshot-4.png?rev=3568084","caption":"Das Dashboard nach Aktivierung: aktueller Sicherheits-Score und jeder Pr\u00fcfpunkt mit Klartext-Erkl\u00e4rung."}],"raw_content":"<!--section=description-->\n<p><strong>Bastora<\/strong> ist ein ehrlicher WordPress-Sicherheits-Check. Statt tausend Schalter ohne Erkl\u00e4rung pr\u00fcft Bastora Deine Installation gegen einen festen Katalog aus <strong>58 Sicherheitspunkten<\/strong> und zeigt Dir das Ergebnis als Klartext-Ampel direkt in Deinem Dashboard.<\/p>\n\n<p>Bastora unterscheidet sich von anderen Sicherheits-Plugins in drei Punkten:<\/p>\n\n<ol>\n<li><strong>Ehrliche Au\u00dfensicht.<\/strong> Bastora pr\u00fcft Deine Seite so, wie ein Bot sie sieht: Versionslecks im HTML, offene Verzeichnis-Listen, fehlende Security-Header, sichtbare Endpoints. Die meisten anderen Plugins pr\u00fcfen nur ihre eigene Konfiguration.<\/li>\n<li><strong>Konflikt-erkennende Auto-H\u00e4rtung.<\/strong> H\u00e4rtungen sind ab Werk aktiv. Bastora pr\u00fcft, ob ein anderes Sicherheits-Plugin (Wordfence, Solid Security, AIOS, Limit Login Attempts und andere) denselben Punkt schon \u00fcbernimmt, und tritt elegant zur Seite, statt einen Konflikt zu bauen.<\/li>\n<li><strong>Null Konfiguration.<\/strong> Installieren, aktivieren, einmal \u201eSicherheitspr\u00fcfung starten\" klicken, fertig. Bastora richtet sich selbst ein.<\/li>\n<\/ol>\n\n<h4>Was Bastora pr\u00fcft<\/h4>\n\n<ul>\n<li><strong>Zugangssicherheit (11 Punkte):<\/strong> HTTPS-Login, Brute-Force-Schutz, Salt-Keys, geteilte Konten, Login-Verhalten<\/li>\n<li><strong>Systemabsicherung (13 Punkte):<\/strong> Datei-Editor, Verzeichnis-Listings, wp-config-Sperre, Debug-Modus, Dateirechte, Revisionen, <strong>Kerndatei-Abgleich gegen das Original von wordpress.org mit automatischer Reparatur<\/strong>, <strong>t\u00e4glicher Abgleich aller Plugins gegen wordpress.org<\/strong>, <strong>t\u00e4glicher Abgleich aller Themes gegen wordpress.org<\/strong><\/li>\n<li><strong>Informationsschutz (10 Punkte):<\/strong> Generator-Tag, RSD-Link, WLW-Manifest, XML-RPC, REST-API-Benutzer, Pingbacks, X-Powered-By<\/li>\n<li><strong>Security-Header (5 Punkte):<\/strong> X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, HSTS<\/li>\n<li><strong>Pingbacks (2 Punkte):<\/strong> ausgehende und eingehende Pingbacks<\/li>\n<li><strong>Auto-Updates (7 Punkte):<\/strong> n\u00e4chtlicher Schutz, Minor-\/Major-Auto-Updates, Plugin-\/Theme-Auto-Updates, verwaiste Erweiterungen<\/li>\n<li><strong>Monitoring und Betrieb (7 Punkte):<\/strong> Transients, Revisions-Cleanup, Captcha, WordPress-Version, PHP-Version, \/uploads\/-PHP-Sperre, Sicherheits-Plugin-Status<\/li>\n<\/ul>\n\n<h4>Was Bastora h\u00e4rtet (wenn kein Konflikt erkannt wird)<\/h4>\n\n<ul>\n<li>WordPress-Version aus HTML und RSS-Feed entfernt<\/li>\n<li>RSD-Link und WLW-Manifest entfernt<\/li>\n<li>Login-Shake-Effekt deaktiviert<\/li>\n<li>Login-Fehlermeldung verallgemeinert (verr\u00e4t nicht mehr, welche Benutzer existieren)<\/li>\n<li>Author-Seiten umgeleitet (verhindert das Aufz\u00e4hlen von Benutzernamen)<\/li>\n<li>XML-RPC abgeschaltet (au\u00dfer ein konkurrierendes Plugin \u00fcbernimmt das schon)<\/li>\n<li>Pingback-XML-RPC-Methoden gesperrt<\/li>\n<li>REST-API-Endpoint \/users f\u00fcr nicht eingeloggte Anfragen gesperrt<\/li>\n<li>Application Passwords deaktiviert<\/li>\n<li><strong>Login-Honeypot:<\/strong> verstecktes Formularfeld in der Login-Maske, das Bots ausf\u00fcllen und sich damit als Bot zu erkennen geben<\/li>\n<li><strong>Brute-Force-Schutz mit IP-Sperre:<\/strong> 5 Fehlversuche \u2192 30 Minuten Sperre. Bei wiederholten Sperren: Eskalation auf 4 Stunden, dann 24 Stunden. Z\u00e4hler setzt sich nach erfolgreichem Login zur\u00fcck. IPv6 wird auf dem \/64-Pr\u00e4fix gesperrt. Cloudflare- und Reverse-Proxy-IP-Erkennung ist eingebaut.<\/li>\n<li><strong>Kerndatei-Auto-Reparatur:<\/strong> Bastora vergleicht t\u00e4glich Deine WordPress-Kerndateien mit den offiziellen Hashes von wordpress.org. Wird eine Datei manipuliert oder fehlt, l\u00e4dt Bastora die saubere Originaldatei aus der offiziellen WordPress-ZIP, validiert ihren Hash doppelt und ersetzt die kompromittierte Version automatisch. Die alte Datei wandert zur Spurensicherung in <code>wp-content\/uploads\/bastora-quarantine\/<\/code>. Du bekommst eine E-Mail mit der Liste der reparierten Dateien. Voraussetzung: Versions-Abgleich-Opt-in aktiv. Bei Hostern mit schreibgesch\u00fctzten Core-Dateien bleibt die Anzeige + Mail erhalten.<\/li>\n<li><strong>Bastora-Schwarm (opt-in):<\/strong> Sobald eine teilnehmende Bastora-Website einen Brute-Force-Angriff erkennt, wandert die Angreifer-IP anonym in einen geteilten Sperrkatalog. Deine Seite holt diesen Katalog alle paar Minuten ab und blockiert die IPs, bevor sie \u00fcberhaupt anklopfen. Im Gegenzug meldet Deine Seite Angreifer, die Du erkennst. Versendet wird ausschlie\u00dflich die Angreifer-IP samt Angriffs-Typ und ein anonymer UUID-Token, keine Domain, keine Besucher-IPs, keine Owner-Daten. Aktivierung erfolgt im Onboarding-Wizard oder unter Einstellungen.<\/li>\n<\/ul>\n\n<h4>Konflikt-erkennend<\/h4>\n\n<p>Wenn eines der folgenden Plugins schon l\u00e4uft, erkennt Bastora das und deaktiviert nur die \u00fcberlappenden Bereiche:<\/p>\n\n<ul>\n<li>Wordfence Security<\/li>\n<li>Sucuri Security<\/li>\n<li>Solid Security (fr\u00fcher iThemes)<\/li>\n<li>All-In-One WP Security &amp; Firewall<\/li>\n<li>MalCare Security<\/li>\n<li>WP Cerber Security<\/li>\n<li>Limit Login Attempts Reloaded<\/li>\n<li>Disable XML-RPC<\/li>\n<li>Disable Application Passwords<\/li>\n<li>Really Simple SSL<\/li>\n<li>HTTP Headers<\/li>\n<\/ul>\n\n<p>Im Dashboard siehst Du pro H\u00e4rtung im Klartext, warum sie aktiv oder inaktiv ist.<\/p>\n\n<h4>Was Bastora bewusst **nicht** macht<\/h4>\n\n<ul>\n<li><strong>Kein erzwungenes TOTP.<\/strong> Solopreneure sperren sich regelm\u00e4\u00dfig mit Authenticator-Apps aus. Bastora setzt stattdessen auf Brute-Force-Schutz, Rate-Limit und Anomalie-Erkennung.<\/li>\n<li><strong>Kein Verstecken der Login-URL.<\/strong> Eine umbenannte Login-URL macht den Passwort-Reset-Link in der Mail kaputt, sobald das Plugin deaktiviert wird. Rate-Limit plus Honeypot ist die saubere L\u00f6sung.<\/li>\n<li><strong>Keine Cloud-Verbindung ohne Zustimmung.<\/strong> Alle externen Verbindungen (auch Versions-Abgleich gegen wordpress.org) sind ab Werk aus. Sie schalten sich erst ein, wenn Du sie im Welcome-Wizard oder in den Einstellungen ausdr\u00fccklich freigibst.<\/li>\n<\/ul>\n\n<h4>Optionale anonyme Statistik (Opt-in)<\/h4>\n\n<p>Wenn Du das H\u00e4kchen \u201eStatistik aktivieren und teilen\" in den Einstellungen setzt, schickt Bastora einmal sofort und danach nur alle 28 Tage eine kompakte anonyme Zusammenfassung per HTTPS-POST an <code>https:\/\/bastora.de\/v1\/telemetry\/<\/code>. Vor dem H\u00e4kchen geht kein einziger Request raus. Die niedrige Frequenz ist bewusst: Bastora will Masse-Infos \u00fcber viele Sites sammeln, kein dichtes Zeitprofil einzelner Sites.<\/p>\n\n<p>\u00dcbertragen werden ausschlie\u00dflich:<\/p>\n\n<ul>\n<li>Eine zuf\u00e4llige anonyme Site-ID (UUID), lokal beim ersten Plugin-Start erzeugt<\/li>\n<li>Plugin-Version, WordPress-, PHP- und MySQL-Versions-Strings<\/li>\n<li>Locale (zum Beispiel de_DE)<\/li>\n<li>Multisite-Flag (ja\/nein)<\/li>\n<li>Liste der installierten Plugin-Slugs (max. 200, ohne Versionen)<\/li>\n<li>Audit-Score und Counter pro Status (bestanden \/ Hinweis \/ offen \/ nicht pr\u00fcfbar)<\/li>\n<\/ul>\n\n<p>Was <strong>nie<\/strong> \u00fcbertragen wird: Domain, URL, IP-Adresse, E-Mail-Adressen, Benutzernamen, Beitragsinhalte, Dateiinhalte, Plugin-Versionen pro Slug. Der bastora.de-Server loggt keine Aufrufer-IP. Pro Site-ID wird maximal ein Eintrag pro Tag akzeptiert (UPSERT), die normale Sende-Frequenz pro Site liegt ohnehin bei einem Datensatz alle 28 Tage. Bei Deinstallation des Plugins werden die lokale Site-ID und alle Bastora-Optionen entfernt.<\/p>\n\n<h3>Privacy<\/h3>\n\n<h4>Externe Verbindungen<\/h4>\n\n<p>Bastora kontaktiert externe Server in zwei klar getrennten F\u00e4llen. <strong>Beide sind opt-in. Ab Werk macht das Plugin keine externen Verbindungen.<\/strong><\/p>\n\n<p><strong>1. Versions-Abgleich gegen api.wordpress.org (opt-in)<\/strong><\/p>\n\n<p>Wenn Du im Welcome-Wizard oder in den Einstellungen \u201eVersions-Abgleich erlauben\" aktivierst, fragt Bastora bei einem manuellen Scan die api.wordpress.org nach:<\/p>\n\n<ul>\n<li>der aktuellen WordPress-Core-Version: <code>https:\/\/api.wordpress.org\/core\/version-check\/1.7\/<\/code><\/li>\n<li>den offiziellen Datei-Hashes der installierten WordPress-Version (f\u00fcr den Kerndatei-Abgleich): <code>https:\/\/api.wordpress.org\/core\/checksums\/1.0\/?version=&lt;version&gt;&amp;locale=en_US<\/code><\/li>\n<li>pro erkennbarem Plugin nach dessen letztem Update-Datum: <code>https:\/\/api.wordpress.org\/plugins\/info\/1.0\/&lt;slug&gt;.json<\/code><\/li>\n<li>pro erkennbarem Theme nach dessen letztem Update-Datum: <code>https:\/\/api.wordpress.org\/themes\/info\/1.2\/?action=theme_information&amp;request[slug]=&lt;slug&gt;<\/code><\/li>\n<\/ul>\n\n<p>Wenn Bastora bei der t\u00e4glichen Pr\u00fcfung manipulierte oder fehlende Kerndateien entdeckt, l\u00e4dt Bastora zus\u00e4tzlich die offizielle WordPress-ZIP herunter, um die saubere Originaldatei zu extrahieren:<\/p>\n\n<ul>\n<li><code>https:\/\/downloads.wordpress.org\/release\/wordpress-&lt;version&gt;.zip<\/code><\/li>\n<\/ul>\n\n<p>Die ZIP wird einmal pro Version 7 Tage lokal in <code>wp-content\/uploads\/bastora-quarantine\/_core-cache\/<\/code> gespeichert, um wiederholten Bandbreitenverbrauch zu vermeiden. Vor dem Ersetzen einer Datei pr\u00fcft Bastora deren MD5-Hash gegen den von api.wordpress.org gemeldeten Wert (Doppel-Sicherung gegen Download-Pannen).<\/p>\n\n<p>Ab Plugin-Version 0.4.0 l\u00e4dt Bastora f\u00fcr die t\u00e4gliche Plugin- und Theme-Wache zus\u00e4tzlich pro installiertem Plugin\/Theme die offizielle ZIP aus dem WordPress.org-Repository, um die einzelnen Dateien gegen das Original abzugleichen:<\/p>\n\n<ul>\n<li><code>https:\/\/downloads.wordpress.org\/plugin\/&lt;slug&gt;.&lt;version&gt;.zip<\/code><\/li>\n<li><code>https:\/\/downloads.wordpress.org\/theme\/&lt;slug&gt;.&lt;version&gt;.zip<\/code><\/li>\n<\/ul>\n\n<p>Die ZIPs werden 7 Tage lokal in <code>wp-content\/uploads\/bastora-quarantine\/_asset-cache\/<\/code> gespeichert. Plugins und Themes, die NICHT im offiziellen WordPress.org-Repository liegen (z.B. Premium-Plugins, Custom-Themes), werden als \u201eextern, nicht pr\u00fcfbar\" markiert, es geht kein Request raus au\u00dfer dem ersten API-Lookup, der mit 404 antwortet und das Ergebnis 24 Stunden zwischenspeichert. Eine automatische Reparatur findet bei Plugins und Themes bewusst NICHT statt; bei Funden bekommst Du eine Admin-Mail mit der Liste der abweichenden Dateien.<\/p>\n\n<p>Das ist dieselbe API, die WordPress selbst f\u00fcr seine eigenen Update-Checks nutzt. \u00dcbertragen wird nur der Slug pro Plugin oder Theme. Keine Domain, keine Nutzerdaten, keine Besucher-IP. Die Abfragen laufen nur bei manuellem Klick auf den Scan-Button, nie automatisch im Hintergrund. Antworten werden 24 Stunden zwischengespeichert.<\/p>\n\n<p>Wenn Du diesen Punkt nicht aktivierst, werden die update-relevanten Audit-Punkte als \u201enicht pr\u00fcfbar\" markiert und es geht keine Anfrage raus.<\/p>\n\n<p><strong>2. Bastora-Schwarm (opt-in, ab Plugin-Version 0.3.0)<\/strong><\/p>\n\n<p>Wenn Du den Bastora-Schwarm im Welcome-Wizard oder unter \u201eEinstellungen \u2192 Bastora-Schwarm\" aktivierst, tauscht das Plugin Brute-Force-Angreifer-IPs anonym mit anderen teilnehmenden Sites aus. Drei Endpoints sind beteiligt:<\/p>\n\n<ul>\n<li><code>https:\/\/bastora.de\/api\/swarm-register.php<\/code>, Einmaliger POST beim Aktivieren. Der Server vergibt einen anonymen UUID-Token. \u00dcbertragen wird: die Plugin-Version. Nicht \u00fcbertragen wird: Domain, URL, IP-Adresse Deiner Besucher, Owner-Daten. Die Server-IP des HTTP-Requests wird nur als gesalzener SHA-256-Hash f\u00fcr ein Rate-Limit gespeichert und ist nicht zur\u00fcckrechenbar.<\/li>\n<li><code>https:\/\/bastora.de\/api\/swarm-report.php<\/code>, POST bei Erkennung eines Brute-Force-Angriffs. \u00dcbertragen wird: der anonyme Token, die Angreifer-IP, der Angriffs-Typ (\u201elogin_bruteforce\"), die Severity, die Plugin-Version. Nicht \u00fcbertragen wird: alles andere.<\/li>\n<li><code>https:\/\/bastora.de\/api\/swarm-feed.php<\/code>, GET-Abruf der aktuellen Sperrliste, alle 5 Minuten via WP-Cron plus on-demand bei Login-Versuchen, jeweils mit 60-Sekunden-Cache und ETag-Optimierung. Im HTTP-Header geht der anonyme Token mit, sonst nichts.<\/li>\n<li><code>https:\/\/bastora.de\/api\/swarm-disconnect.php<\/code>, POST beim Opt-out in den Einstellungen oder beim Deinstallieren. \u00dcbertragen wird: der anonyme Token. Der Server l\u00f6scht den Knoten unmittelbar.<\/li>\n<\/ul>\n\n<p>Der HTTP-User-Agent ist bei allen vier Endpoints statisch \u201eBastora-Swarm\/\", damit WordPress die Domain nicht \u00fcber den Default-UA mitschickt. Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an Angriffsabwehr). Eingegangene Reports werden serverseitig nach 14 Tagen automatisch gel\u00f6scht (Datenminimierung). Sperrlisten-Eintr\u00e4ge verfallen nach 72 Stunden ohne neue Meldungen.<\/p>\n\n<p><strong>Pwned-Passwords-Abgleich (Opt-in, nur Backend-Login)<\/strong><\/p>\n\n<p>Wenn Du in den Einstellungen den Passwort-Leak-Check aktivierst, schickt Bastora bei jedem Backend-Login (max. 1\u00d7 pro 7 Tage pro Nutzer) die ersten f\u00fcnf Hex-Zeichen des SHA-1-Hashes Deines eingegebenen Passworts an <code>https:\/\/bastora.de\/v1\/pwned\/&lt;prefix&gt;<\/code>. \u00dcbertragen wird ausschlie\u00dflich dieses 5-Zeichen-Prefix. Nicht \u00fcbertragen wird: das Passwort selbst, das vollst\u00e4ndige Hash, der Nutzername, die Domain, irgendeine ID. Der bastora.de-Proxy fragt die offizielle haveibeenpwned.com-API mit dem Prefix an, cached das Ergebnis 7 Tage lokal in einer deutschen MySQL-Datenbank und schickt die Liste der Hash-Suffixe zur\u00fcck. Der Abgleich passiert lokal in WordPress. Das Verfahren hei\u00dft k-Anonymity und wird auch von 1Password, Firefox und Chrome genutzt. Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO. Bei Treffer wird der Nutzer im Backend per Notice aufgefordert, das Passwort zu \u00e4ndern, der Login wird nie blockiert.<\/p>\n\n<p><strong>Schad-URL-Feed (Opt-in)<\/strong><\/p>\n\n<p>Wenn Du den Schad-URL-Feed in den Einstellungen aktivierst, holt Bastora einmal pro Tag eine aktualisierte Domain-Liste von <code>https:\/\/bastora.de\/v1\/url-feed\/<\/code>. \u00dcbertragen wird ausschlie\u00dflich ein anonymer GET-Request, optional mit dem Zeitstempel des letzten erfolgreichen Abrufs als <code>?since=&lt;unixts&gt;<\/code>, damit nur neu hinzugekommene Eintr\u00e4ge geliefert werden. Es geht keine Domain Deiner Seite, keine Besucher-Daten und kein Identifier raus. Die Antwort ist eine reine JSON-Liste mit Schad-Domain, Typ (\u201emalware\" oder \u201ephishing\") und Severity, sie enth\u00e4lt keinen ausf\u00fchrbaren Code. Quellen, die der Bastora-Server aggregiert: URLhaus (abuse.ch, CC0 1.0) und der OpenPhish-Community-Feed. Die Liste wird lokal in einer WP-Option gespeichert (Hard-Cap 50 000 Eintr\u00e4ge, 30 Tage Plugin-seitige TTL) und vom URL-Watch-Modul zus\u00e4tzlich zur eingebauten Startliste f\u00fcr die Pr\u00fcfung von Beitr\u00e4gen und Kommentaren genutzt. Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO. Vor dem Opt-in-H\u00e4kchen wird kein einziger Aufruf an <code>bastora.de\/v1\/url-feed\/<\/code> ausgef\u00fchrt.<\/p>\n\n<p><strong>Anonyme Sicherheits-Telemetrie an bastora.de (Opt-in)<\/strong><\/p>\n\n<p>Wenn Du in den Einstellungen den Schalter \u201eStatistik aktivieren und teilen\" setzt, schickt Bastora einmal sofort und danach nur alle 28 Tage einen JSON-POST an <code>https:\/\/www.bastora.de\/v1\/telemetry\/<\/code>. Vor dem H\u00e4kchen wird <strong>kein<\/strong> Aufruf ausgef\u00fchrt. Ab Plugin-Version 1.0.3 ist das Datenpaket bewusst umfangreicher, damit Bastora das gemeinsame Bedrohungsbild f\u00fcr die WordPress-Welt sch\u00e4rfen kann. Die niedrige Frequenz ist bewusst: Bastora will Masse-Infos \u00fcber viele Sites sammeln, kein dichtes Zeitprofil einzelner Sites. \u00dcbertragen wird:<\/p>\n\n<ul>\n<li>Eine zuf\u00e4llige anonyme Site-ID (UUID), lokal beim ersten Plugin-Start erzeugt<\/li>\n<li>Bastora-Plugin-Version<\/li>\n<li>WordPress-Version + die zum Zeitpunkt der Erfassung aktuelle Core-Version + Update-Status (ja\/nein)<\/li>\n<li>PHP- und MySQL-Versions-Strings<\/li>\n<li>Server-Software-String (z.B. \u201eApache\/2.4\")<\/li>\n<li>Anonymer Hosting-Provider-Slug (z.B. \u201ehetzner\", \u201eionos\", \u201ekinsta\"), ermittelt aus Konstanten-Markern bekannter Managed-Hoster, Reverse-DNS auf die Server-IP, sowie DOCUMENT_ROOT-Pfad-Pattern. Die Server-IP selbst wird NICHT gesendet.<\/li>\n<li>Locale (zum Beispiel de_DE), Zeitzone, Multisite-Flag<\/li>\n<li>Pro installiertem Plugin: Slug, installierte Version, Autor, neueste verf\u00fcgbare Version (Quelle: api.wordpress.org-Cache), ob Update bereitsteht, ob Auto-Update aktiv ist, ob Plugin aktiv oder inaktiv. Max. 200 Plugins.<\/li>\n<li>Pro installiertem Theme: Slug, installierte Version, Autor, neueste verf\u00fcgbare Version, Update-Status, Auto-Update, Eltern-Theme bei Child-Themes. Max. 75 Themes.<\/li>\n<li>Aktives Theme: Slug, Version, Autor, Eltern-Theme<\/li>\n<li>User-Counts pro Rolle (nur Zahlen, keine Namen oder Mails)<\/li>\n<li>Content-Counts: Anzahl ver\u00f6ffentlichter Beitr\u00e4ge, Seiten, Kommentare (total \/ approved \/ spam)<\/li>\n<li>WordPress-Konfigurations-Flags: WP_DEBUG, DISALLOW_FILE_EDIT, DISALLOW_FILE_MODS, FORCE_SSL_ADMIN, gesch\u00e4tzte autoload-Options-Gr\u00f6\u00dfe in KB<\/li>\n<li>Audit-Summary (Counter pro Status) + Audit-Findings-Map: pro Audit-Punkt-ID ein kompakter Status-Code (0=bestanden, 1=Hinweis, 2=offen, 3=nicht pr\u00fcfbar). Damit wertet die Server-Statistik die h\u00e4ufigsten Sicherheitsl\u00fccken aus.<\/li>\n<li>Erkannte Sicherheits-Plugins mit Klassifizierung free \/ Pro \/ lizenz-aktiviert (z.B. Wordfence Free vs. Wordfence Premium per API-Key-Konstante)<\/li>\n<li>Bastora-eigene H\u00e4rtungs-Schalter mit Aktiv-Status und erkannten Konflikten (welche Bereiche andere Sicherheits-Plugins schon \u00fcbernehmen)<\/li>\n<\/ul>\n\n<p>Was <strong>nie<\/strong> \u00fcbertragen wird: Domain, URL, Server-IP, Besucher-IPs, E-Mail-Adressen, Benutzernamen, Beitragsinhalte, Datei-Inhalte, Datenbank-Inhalte. Der bastora.de-Server loggt keine Aufrufer-IP. Pro Site-ID akzeptiert der Server maximal einen Eintrag pro Tag (UPSERT, der jeweils neueste Stand bleibt). Rechtsgrundlage: Art. 6 Abs. 1 lit. f DSGVO. Bei Deinstallation des Plugins wird die lokale Site-ID gel\u00f6scht.<\/p>\n\n<p><strong>Wichtige Einordnung zur Quasi-Eindeutigkeit:<\/strong> Die Kombination aus Plugin-Inventar, Theme-Inventar, jeweiligen Versionen, Hosting-Provider-Slug und Locale ist statistisch sehr individuell. Auch ohne Domain entsteht damit ein \u201eFingerprint\" der Installation. Bastora nutzt die Daten ausschlie\u00dflich f\u00fcr die anonyme Statistik (h\u00e4ufigste Plugins, h\u00e4ufigste L\u00fccken, Update-R\u00fcckst\u00e4nde) und f\u00fchrt die Telemetrie-Datenbank nie mit anderen Datenquellen zusammen. Wenn diese Einordnung f\u00fcr Dich nicht akzeptabel ist, lass das Telemetrie-H\u00e4kchen leer , das Plugin funktioniert auch ohne.<\/p>\n\n<p><strong>Lokale DNS-Anfrage zur Hosting-Provider-Erkennung (nur als Teil der Telemetrie-Funktion)<\/strong><\/p>\n\n<p>Wenn die Telemetrie aktiv ist, ermittelt Bastora einmalig den anonymen Hosting-Provider-Slug (z.B. \u201ehetzner\", \u201eionos\", \u201ekinsta\"). Daf\u00fcr ruft Bastora die lokale PHP-Funktion <code>gethostbyaddr()<\/code> mit der eigenen Server-IP auf, was eine PTR-Anfrage am Resolver des Hosters ausl\u00f6st. Es geht KEIN Aufruf an einen Bastora-eigenen Server, keine externe API und keine Domain raus, nur die normale lokale Namensaufl\u00f6sung am Hoster-DNS. Das Ergebnis wird 30 Tage in einer WP-Option zwischengespeichert, damit das nur einmal alle 30 Tage passiert. Vor dem Telemetrie-Opt-in l\u00e4uft auch diese Funktion nicht.<\/p>\n\n<h4>Datenschutzhinweis<\/h4>\n\n<p>Vollst\u00e4ndige Datenschutzerkl\u00e4rung: https:\/\/bastora.de\/datenschutz.php\nVerantwortliche Stelle laut Impressum: https:\/\/bastora.de\/impressum.php<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Installiere das Plugin aus dem WordPress-Plugin-Verzeichnis oder lade den ZIP-Ordner nach <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Aktiviere das Plugin im Men\u00fc \u201ePlugins\".<\/li>\n<li>\u00d6ffne das neue Men\u00fc \u201eBastora\" und klicke einmal auf \u201eSicherheitspr\u00fcfung starten\".<\/li>\n<\/ol>\n\n<p>Mehr ist nicht zu tun. Bastora richtet sich selbst ein.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"brauche%20ich%20technisches%20wissen%2C%20um%20bastora%20zu%20nutzen%3F\"><h3>Brauche ich technisches Wissen, um Bastora zu nutzen?<\/h3><\/dt>\n<dd><p>Nein. Bastora braucht keine Konfiguration. Installieren, aktivieren, scannen, fertig.<\/p><\/dd>\n<dt id=\"funktioniert%20bastora%20neben%20wordfence%2Fsucuri%2Fsolid%20security%3F\"><h3>Funktioniert Bastora neben Wordfence\/Sucuri\/Solid Security?<\/h3><\/dt>\n<dd><p>Ja. Bastora erkennt diese Plugins beim Aktivieren und tritt in den \u00fcberlappenden Bereichen zur Seite. Das Dashboard zeigt Dir, welche H\u00e4rtungen wegen eines Konflikts inaktiv sind.<\/p><\/dd>\n<dt id=\"%C3%9Cbertr%C3%A4gt%20das%20plugin%20daten%20von%20meiner%20seite%3F\"><h3>\u00dcbertr\u00e4gt das Plugin Daten von meiner Seite?<\/h3><\/dt>\n<dd><p>Ab Werk nichts. Externe Verbindungen schaltest Du in den Einstellungen einzeln frei: Versions-Abgleich gegen api.wordpress.org, Bastora-Schwarm, Schad-URL-Feed, Passwort-Leak-Check, anonyme Statistik. Jede dieser Verbindungen ist standardm\u00e4\u00dfig aus und sendet erst nach Deinem H\u00e4kchen Daten.<\/p><\/dd>\n<dt id=\"wie%20nehme%20ich%20die%20anonyme%20statistik%20wieder%20zur%C3%BCck%3F\"><h3>Wie nehme ich die anonyme Statistik wieder zur\u00fcck?<\/h3><\/dt>\n<dd><p>Bastora \u2192 Einstellungen \u2192 H\u00e4kchen bei \u201eStatistik aktivieren und teilen\" raus \u2192 speichern. Der t\u00e4gliche Cron wird sofort gestoppt, ab da geht kein Eintrag mehr an bastora.de. Die bereits gesammelten Datens\u00e4tze werden serverseitig nicht von uns r\u00fcckwirkend gel\u00f6scht, weil sie keinen Bezug zu Deiner Domain haben (nur eine zuf\u00e4llige UUID).<\/p><\/dd>\n<dt id=\"wo%20werden%20die%20daten%20gespeichert%3F\"><h3>Wo werden die Daten gespeichert?<\/h3><\/dt>\n<dd><p>Auf deutschen Servern. Bastora arbeitet ausschlie\u00dflich mit einem deutschen Hoster.<\/p><\/dd>\n<dt id=\"was%20passiert%2C%20wenn%20ich%20bastora%20deinstalliere%3F\"><h3>Was passiert, wenn ich Bastora deinstalliere?<\/h3><\/dt>\n<dd><p>Bei normaler Deaktivierung bleiben die Bastora-Einstellungen erhalten. Wenn Du das Plugin per \u201eL\u00f6schen\" entfernst, werden alle Einstellungen, Audit-Ergebnisse und Site-IDs gel\u00f6scht. H\u00e4rtungen werden automatisch zur\u00fcckgerollt. Bei aktivem Schwarm-Schutz meldet das Plugin den anonymen Token vorher beim Schwarm-Server ab.<\/p><\/dd>\n<dt id=\"wie%20funktioniert%20der%20bastora-schwarm%3F\"><h3>Wie funktioniert der Bastora-Schwarm?<\/h3><\/dt>\n<dd><p>Der Bastora-Schwarm ist ein opt-in-basierter Pool aus teilnehmenden Bastora-Sites. Erkennt eine Site einen Brute-Force-Angriff (5 fehlgeschlagene Logins von derselben IP), schickt sie die Angreifer-IP samt Angriffs-Typ anonym an einen zentralen Server. Wenn mehrere unabh\u00e4ngige Sites dieselbe IP melden oder eine einzelne Site dieselbe IP h\u00e4ufig meldet, wandert die IP in einen Sperrkatalog. Alle teilnehmenden Sites holen diesen Katalog alle paar Minuten ab und sperren die IPs vorbeugend. Eintragungen verfallen automatisch nach 72 Stunden, falls keine neuen Meldungen reinkommen. Bekannte Crawler (Googlebot, Bingbot, Cloudflare etc.) werden serverseitig nie \u00fcbernommen, damit sie nicht versehentlich gesperrt werden.<\/p><\/dd>\n<dt id=\"welche%20daten%20verlassen%20meine%20seite%2C%20wenn%20der%20schwarm%20aktiv%20ist%3F\"><h3>Welche Daten verlassen meine Seite, wenn der Schwarm aktiv ist?<\/h3><\/dt>\n<dd><p>Ausschlie\u00dflich: die Angreifer-IP, der Angriffs-Typ (\u201elogin_bruteforce\"), die Bastora-Plugin-Version und ein anonymer UUID-Token, der beim Aktivieren einmalig generiert wurde. Nicht versendet werden: Deine Domain, Deine URL, Deine Besucher-IPs, Deine Benutzernamen, Deine E-Mail-Adresse, irgendetwas zu Deiner Konfiguration. Auch der HTTP-User-Agent ist statisch (\u201eBastora-Swarm\/Version\"), damit WordPress die Domain nicht \u00fcber den Standard-UA mitschickt. Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an Angriffsabwehr).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.5<\/h4>\n\n<ul>\n<li><strong>Sieben Audit-Punkte sind als \u201ePro-Feature\" markiert,<\/strong> weil sie strukturell nur \u00fcber den Bastora-Schutz-Service mit MU-Plugin l\u00f6sbar sind: Dateirechte, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, HSTS, PHP-Sperre f\u00fcr das uploads-Verzeichnis. Sie z\u00e4hlen mit Gewichtung null im Score, der maximale Free-Score liegt damit unter 100. Jede Pro-Markierung kommt mit einem Klartext-Satz, warum dieser Punkt am Web-Server sitzt und im Pro vom MU-Plugin verwaltet wird.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li><strong>WAF, Schadcode-Scanner und Aktivit\u00e4ts-Log werden erst beim Wizard-Schritt scharf, nicht mehr beim Plugin-Activate.<\/strong> Vorher liefen die drei Module ab dem Moment, wo Du das Plugin aktiviert hast , das hat den ersten Audit-Scan gesch\u00f6nt, weil der WAF-Schutz schon stand bevor Du gemessen hast. Ab jetzt: der erste Scan zeigt ehrlich die Lage Deiner Site vor Bastora, der zweite Scan nach dem Wizard zeigt den echten Sprung. Bestands-Sites mit bereits abgeschlossenem Setup werden per Migration einmalig auf den neuen Aktiv-Marker gehoben, das Plugin l\u00e4uft dort unver\u00e4ndert weiter.<\/li>\n<li><strong>Audit-Score z\u00e4hlt jetzt \u201enicht pr\u00fcfbar\"-Punkte mit 0.5 Gewicht<\/strong> statt sie komplett aus der Berechnung auszuschlie\u00dfen. Vorher konnte ein Score von 100 vorgegaukelt werden, wenn der User zwar 10 von 58 Punkten bestanden hatte, aber 48 wegen fehlender Opt-ins als \u201enicht pr\u00fcfbar\" markiert waren. Jetzt ist der Score ehrlich.<\/li>\n<li><strong>Werkstatt-Links ohne Ziel-Artikel werden weggelassen,<\/strong> statt auf eine generische \u00dcbersichtsseite zu zeigen. Sechs Audit-Punkte (system.11\/12\/13\/14\/15, monitor.08) haben noch keinen dezidierten Artikel, bei denen erscheint jetzt einfach kein Link , das ist ehrlicher als ein irref\u00fchrender Verweis.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li><strong>Rollback Tested up to 7.0.<\/strong> Die in 1.2.2 f\u00e4lschlich auf 6.7 gesetzte Angabe ist zur\u00fcck auf 7.0.<\/li>\n<li><strong>Audit-Punkt zugang.08 sauberer gepr\u00fcft.<\/strong> Statt der semantisch leeren Pr\u00fcfung auf <code>has_filter('authenticate_username_password')<\/code> jetzt der korrekte Check auf <code>has_filter('authenticate', 'wp_authenticate_email_password')<\/code>. Damit erkennt der Audit echte Deregistrierungen des E-Mail-Login-Default und nicht blo\u00df irgendwelche fremden Filter-Hooks.<\/li>\n<li><strong>Audit-Punkt monitor.03 pr\u00e4ziser.<\/strong> Bisher pr\u00fcfte der Check nur das Honeypot-H\u00e4rtungs-Flag und behauptete dabei trotzdem vier Schichten. Jetzt pr\u00fcft der Check den Setup-Complete-Marker plus die Existenz der Bastora_Captcha-Klasse, das ist der korrekte Indikator f\u00fcr das Vier-Schichten-Captcha (Honeypot, Time-Trap, JS-Proof-of-Work, Math-Fallback ab dem dritten Login-Fehler).<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li><strong>Bugfix Telemetrie-Option.<\/strong> Die Telemetrie hat die Option <code>bastora_external_calls_enabled<\/code> gepr\u00fcft, korrekt hie\u00df sie schon immer <code>bastora_external_calls_allowed<\/code>. Folge: die latest-Version-Felder der Plugin- und Theme-Inventur blieben leer, weil der Update-Check nicht angesto\u00dfen wurde. Plus das Telemetrie-Payload meldete <code>external_calls<\/code> immer als aus. Gefixt.<\/li>\n<li><strong>Quick-Action Auto-Updates ohne 25-Sekunden-H\u00e4nger.<\/strong> Der Klick auf \u201eAuto-Updates f\u00fcr alle Themes\/Plugins aktivieren\" lief vorher synchron durch einen kompletten Re-Scan, was bis zu 25 Sekunden Admin-Lockup bedeutete. Jetzt patcht Bastora den betroffenen Audit-Punkt direkt im Scan-Cache und antwortet sofort.<\/li>\n<li><strong>Tested up to<\/strong> auf 6.7 korrigiert (war f\u00e4lschlich 7.0).<\/li>\n<li><strong>Texte aufger\u00e4umt.<\/strong> \u201eScharf schalten\" \u00fcberall ersetzt durch \u201eaktivieren\". Status-Karten der Wachen vereinheitlicht (k\u00fcrzer, ohne Architektur-Lecks, \u201eandere Bastora-Sites\" durch \u201eSchwarm-Netzwerk\" ersetzt). Negationen aus update.04 und update.05 raus. Child-Theme-Hinweis in update.05 f\u00fcr Laien lesbar formuliert. Pwned-Erkl\u00e4rung pr\u00e4zisiert: \u201enur ein anonymer Hash\" statt \u201everschl\u00fcsselt\".<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li><strong>Quick-Action im Audit-Finding update.04 und update.05.<\/strong> Wenn Plugin- oder Theme-Auto-Updates noch nicht aktiv sind, steht im Detail des jeweiligen Audit-Punktes ein Knopf \u201eAuto-Updates f\u00fcr alle Plugins (bzw. Themes) aktivieren\". Ein Klick setzt eine Bastora-Option, Bastora registriert beim n\u00e4chsten Page-Load den entsprechenden WordPress-Core-Filter (auto_update_plugin \/ auto_update_theme), und der Audit-Punkt springt im sofortigen Re-Scan auf gr\u00fcn.<\/li>\n<li>Werkstatt-Artikel zu update.05 pr\u00e4zisiert. Die irref\u00fchrende \u201ewie bei Plugins\"-Formulierung ist raus, plus klarer Hinweis: Bei aktivem Child-Theme zeigt das WordPress-Backend keinen Auto-Update-Schalter beim Child, sondern beim Parent-Theme. Bastora-Quick-Action umgeht diesen Pfad und setzt den Filter global.<\/li>\n<li>Plugin-Audit-Text f\u00fcr update.05 erg\u00e4nzt um den Child-Theme-Hinweis.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li><strong>UI radikal reduziert.<\/strong> Die Submen\u00fcs \u201eFirewall\", \u201eVerkehr &amp; Sperren\", \u201eAktivit\u00e4t\" und \u201eDatei-Inspektor\" sind weg. Es gibt jetzt nur noch Dashboard, H\u00e4rtung, Einstellungen und den Pro-Tab im Header. Endkunde soll sehen: l\u00e4uft. Mehr nicht. Memory feedback_bastora_pitch_sorgenfreiheit.md.<\/li>\n<li><strong>H\u00e4rtungs-Seite zeigt die sieben Bastora-Wachen<\/strong> (Web Application Firewall, Bot-Schutz, Schadcode-Scanner, Kerndatei-Wache, Plugin- und Theme-Wache, Schwarm-Schutz, Schad-URL-Liste) jeweils mit \u201eAktiv\", \u201eInaktiv\" oder \u201eInaktiv (Konflikt)\". Keine Zahlen, keine Trefferz\u00e4hler, keine Protokoll-Tabellen.<\/li>\n<li>Funktionen laufen unver\u00e4ndert weiter: WAF pr\u00fcft jede Anfrage, Block-Rules sperren, Audit-Log loggt sicherheitsrelevante WP-Aktionen, Asset- und Core-Integrity laufen t\u00e4glich. Die Daten gehen in das 28-Tage-Telemetrie-Aggregat an die zentrale Bastora-Datenbank.<\/li>\n<li>Dashboard-Status-Karten der Wachen sind vom Dashboard auf die H\u00e4rtungs-Seite gewandert, dort ohne Zahlen.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li><strong>Dashboard-Texte abgespeckt.<\/strong> Die \u00dcbergangs-Anzeigen der Schad-URL-Liste und des Schwarm-Schutzes nennen keine Quellen-Namen mehr und sind kurz wie ehrlich (\u201eBastora baut die Schutzliste im Hintergrund auf. In den n\u00e4chsten Minuten siehst Du hier die Zahlen.\")<\/li>\n<li><strong>Schwarm-Sperrliste serverseitig mit anerkannten Bad-IP-Quellen vorgef\u00fcllt.<\/strong> Sechs \u00f6ffentlich frei zug\u00e4ngliche Bedrohungslisten (BlocklistDE Login\/SSH\/Mail, CINSScore, GreenSnow, FireHOL Level 1) werden alle 6 Stunden auf bastora.de aggregiert und in die zentrale Sperrliste eingespeist. Damit liefert jede frisch aktivierte Bastora-Free-Installation ab dem ersten Schwarm-Pull eine substantielle Sperrliste, statt bei null IPs zu starten.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li><strong>Wizard-Loader erweitert um sechs zus\u00e4tzliche Hintergrund-Wachen.<\/strong> Bisher hat der \u201eH\u00e4rtung scharf schalten\"-Loader nur die 13 klassischen Filter-H\u00e4rtungen (Generator-Tag, RSD-Link, XML-RPC, REST-Users, Honeypot, Brute-Force usw.) gezeigt. Ab 1.1.1 laufen sechs weitere Schritte in der gleichen AJAX-Choreografie sichtbar mit: Bot-Schutz, WAF, Aktivit\u00e4ts-Log, Schadcode-Scanner, Kerndatei-Wache und Plugin\/Theme-Wache. Jeder Schritt hat eigene Konflikt-Erkennung (z.B. Bot-Schutz zieht sich bei aktivem Wordfence\/Cerber\/StopBadBots zur\u00fcck), die Wachen, die Versions-Abgleich-Opt-in brauchen (Kerndatei + Plugin\/Theme), zeigen einen freundlichen Hinweis, wenn das H\u00e4kchen fehlt. Bot-Schutz wird im Wizard echt aus dem Default \u201eaus\" auf \u201ean\" geschaltet.<\/li>\n<li><strong>Dashboard-Karten Schad-URL-Liste und Schwarm-Schutz<\/strong> zeigen jetzt einen ehrlichen \u00dcbergangs-Text, solange der erste Pull noch ansteht, statt einer nackten \u201e0 Domains\" \/ \u201e0 IPs\". Plus: nach dem Wizard-Finish wird der erste URL-Feed-Pull schon nach 10 Sekunden statt 60 Sekunden angesto\u00dfen, und der Schwarm pullt sofort.<\/li>\n<li>Formulierungsfix: Settings-Hilfetext f\u00fcr KI-Bot-H\u00e4kchen redet jetzt von \u201esetze das H\u00e4kchen\" statt von einem Schieberegler.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li><strong>Neuer Bot-Schutz mit vierstufiger Klassifikation.<\/strong> Suchmaschinen-Crawler (Google, Bing, DuckDuckGo, Yandex, Apple, Mojeek, Baidu) und Social-Preview-Bots (Facebook, X, LinkedIn, WhatsApp, Telegram, Discord, Pinterest, Mastodon) werden automatisch verifiziert (Forward-Confirmed Reverse-DNS) und nie blockiert. Vulnerability-Scanner und Spam-Bots (Nikto, sqlmap, Acunetix, Nessus, Burp, OWASP-ZAP, masscan, Shodan, HTTrack und 40 weitere) werden gesperrt. Drei H\u00e4kchen in den Einstellungen: Bot-Schutz an\/aus, KI-Bots sperren (GPTBot, ClaudeBot, PerplexityBot, Bytespider, Google-Extended, Amazonbot, ...), SEO-Tool-Bots sperren (Ahrefs, Semrush, Majestic, Moz, BLEX, ...). Default: Schutz an, schadhaft sperren, KI und SEO nur loggen. Klartext-Erkl\u00e4rung pro H\u00e4kchen.<\/li>\n<li><strong>Konflikt-Erkennung Bot-Schutz.<\/strong> Wenn Wordfence, Cerber, BBQ, StopBadBots, Blackhole-Bad-Bots oder Solid Security parallel aktiv sind, zieht sich Bastoras Bot-Sperre zur\u00fcck und loggt nur. Memory-Regel feedback_konflikt_check.md.<\/li>\n<li><strong>Bot-Log mit kompaktem Aggregat-Schema.<\/strong> Pro (Bot, Tag, Pfad-Hash) genau eine Zeile mit Hit-Counter, kein Event-Stream. Keine IPs, kein User-Agent in Klartext. Retention 28 Tage. Skaliert auch bei Millionen Crawler-Hits.<\/li>\n<li><strong>Telemetrie 28-Tage-Aggregate.<\/strong> Der bereits auf 28 Tage-Frequenz reduzierte Snapshot enth\u00e4lt jetzt zus\u00e4tzlich aggregierte Statistik der letzten 28 Tage: WAF-Hits + Top-10-Regeln + Top-10-Pfade, Block-Rule-Treffer + aktive Regeln, Brute-Force-Sperren + Lifetime-Counter, Audit-Log-Events pro Typ, Bot-Hits pro Klasse + Top-20-Namen, Top-Pfade aller Bots. Aggregate-Methoden in jedem Modul, nie Roh-Events, nie IPs.<\/li>\n<li><strong>Atomarer Lock-Mechanismus<\/strong> in Kerndatei- und Asset-Integrity bleibt aus 1.0.5. Sucuri-Pro-False-Positive aus 1.0.4 bleibt gefixt. Telemetrie-Frequenz 28 Tage aus 1.0.7 bleibt.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li><strong>Telemetrie-Frequenz von t\u00e4glich auf alle 28 Tage gesenkt.<\/strong> Initial-Send beim Aktivieren bleibt, danach sendet jede Site nur noch alle 28 Tage. Hintergrund: Bastora will Masse-Infos \u00fcber viele Sites sammeln, kein dichtes Zeitprofil einzelner Sites. Bestands-Installationen werden beim ersten plugins_loaded automatisch vom alten daily- auf das neue 28-Tage-Schedule migriert, ohne dass der User den Toggle anfassen muss.<\/li>\n<li>Wizard- und readme-Texte zur Sendefrequenz angepasst.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li><strong>Bugfix sichtbarer Schwarm-Aktivierungs-Fehler.<\/strong> Wenn das Schwarm-H\u00e4kchen im Settings angeklickt und gespeichert wurde, aber der Bastora-Schwarm-Server in dem Moment kein Token liefern konnte, blieb die Option im stillen auf \u201eaus\" und das H\u00e4kchen verschwand beim Reload. Es gab nur die gr\u00fcne \u201eGespeichert\"-Notice, keinen Hinweis auf den Server-Fehler. Jetzt: rote Notice mit dem konkreten Fehler-Text vom Server (HTTP-Code oder Antwort-Detail), und das H\u00e4kchen bleibt im UI optimistisch sichtbar, damit klar ist, dass der lokale Toggle gewollt war.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li><strong>Atomarer Lock-Mechanismus<\/strong> f\u00fcr Kerndatei-Auto-Reparatur und Plugin\/Theme-Asset-Integrity. Bisher gab es eine kurze L\u00fccke zwischen \u201epr\u00fcfen ob Lock aktiv\" und \u201eLock setzen\" (TOCTOU), in der zwei parallele Cron-Trigger gleichzeitig in die Repair-Logik einsteigen konnten. Jetzt mit fopen-Mode 'x' (POSIX O_CREAT|O_EXCL), race-frei.<\/li>\n<li><strong>Transparenz-Hinweis Telemetrie-Eindeutigkeit<\/strong> in readme.txt erg\u00e4nzt. Auch ohne Domain ist die Kombination Plugin-\/Theme-Inventar + Versionen + Hosting-Provider + Locale statistisch sehr individuell. Bastora f\u00fchrt die Telemetrie nie mit anderen Datenquellen zusammen, aber die Eindeutigkeit geh\u00f6rt in die Doku.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li><strong>Bugfix Sucuri-Pro-Erkennung.<\/strong> SucuriScanFirewallAPI::getKey() existiert auch in der Free-Variante, liefert dort nur kein Schl\u00fcssel zur\u00fcck. Bisher wurde jeder Sucuri-Install f\u00e4lschlich als Pro markiert. Jetzt wird nur dann Pro gemeldet, wenn der Schl\u00fcssel auch tats\u00e4chlich bef\u00fcllt ist.<\/li>\n<li><strong>Bugfix Mehrfach-Aggregation in Telemetrie.<\/strong> <code>wp_count_comments()<\/code> wurde drei Mal nacheinander aufgerufen statt einmal zwischengespeichert (drei SQL-Aggregat-Queries statt einer). Plus zus\u00e4tzliche Null-Checks bei <code>wp_count_posts()<\/code>-Resultat.<\/li>\n<li><strong>Telemetrie-Timeout auf 12 s erh\u00f6ht.<\/strong> Der ab 1.0.3 deutlich gr\u00f6\u00dfere Body und der ein-malige Reverse-DNS-Lookup f\u00fcr die Hosting-Erkennung brauchen Luft. 30-Tage-Cache sorgt daf\u00fcr, dass der Lookup nur einmal alle 30 Tage anf\u00e4llt.<\/li>\n<li><strong>Reverse-DNS hart umkapselt.<\/strong> Exception aus disable_functions-Listen wird abgefangen, blockt nicht mehr den Telemetrie-Send.<\/li>\n<li><strong>External-Services-Sektion in readme.txt vervollst\u00e4ndigt<\/strong> um die lokale gethostbyaddr-Aufl\u00f6sung der eigenen Server-IP (kein externer Bastora-Call, nur die PTR-Anfrage am Resolver des Hosters).<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li><strong>Telemetrie deutlich vollst\u00e4ndiger.<\/strong> Wenn Du das H\u00e4kchen gesetzt hast, gehen jetzt zus\u00e4tzlich \u00fcbermittelt: Plugin- und Theme-Autor, jeweils die zum Zeitpunkt der Erfassung neueste verf\u00fcgbare Version (Quelle: api.wordpress.org), ob ein Update bereitsteht und ob Auto-Update f\u00fcr den Eintrag aktiv ist, Eltern-Theme bei Child-Themes, ob WordPress selbst aktuell ist und welche Core-Version aktuell ist. Plus: Bastora-eigene H\u00e4rtungs-Schalter (welche scharf, welche durch andere Sicherheits-Plugins \u00fcbernommen), erkannte Sicherheits-Plugins mit free\/Pro-Klassifizierung, Audit-Findings als Status-Map pro Pr\u00fcfpunkt-ID. Domain, IP und Benutzer-Daten bleiben weiter komplett raus.<\/li>\n<li><strong>Hosting-Provider-Erkennung (anonymisiert).<\/strong> Heuristik in drei Stufen (Konstanten-Marker, Reverse-DNS auf die Server-IP, DOCUMENT_ROOT-Pattern) liefert einen anonymen Provider-Slug wie \"hetzner\", \"ionos\", \"kinsta\", \"all-inkl\", \"udmedia\". Die Server-IP selbst geht nicht raus, nur der ermittelte Provider-Name. Ergebnis wird lokal 30 Tage gecacht.<\/li>\n<li><strong>Audit-Findings-Map.<\/strong> Plugin sendet pro Audit-Punkt einen kompakten Status-Code (0=bestanden, 1=Hinweis, 2=offen, 3=nicht pr\u00fcfbar). Damit kann die Server-Statistik die h\u00e4ufigsten und seltensten L\u00fccken aggregieren.<\/li>\n<li><strong>Telemetrie-Body-Cap auf 96 KB erh\u00f6ht.<\/strong> Plugin-Cap 200, Theme-Cap 75 (vorher 150\/50). Server akzeptiert jetzt bis 96 KB pro Send.<\/li>\n<li>Aktives Theme: zus\u00e4tzlich Autor und Eltern-Theme bei Child-Themes.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li><strong>Activation-Redirect-TTL erh\u00f6ht.<\/strong> Der Wizard-Auto-Aufruf nach Plugin-Aktivierung wartet jetzt bis zu 5 Minuten auf den ersten <code>admin_init<\/code>, vorher nur 30 Sekunden. Verhindert verlorene Redirects bei langsamen Hardening-Boots.<\/li>\n<li><strong>Telemetrie-Body-Gr\u00f6\u00dfe begrenzt.<\/strong> Plugin-Inventar auf 150 Eintr\u00e4ge, Theme-Inventar auf 50 Eintr\u00e4ge gekappt. Sch\u00fctzt vor 413-Antworten auf Hostern mit 32 KB-HTTP-Body-Limit.<\/li>\n<li><strong>Endpoint-Migration r\u00e4umt jetzt die Datenbank auf.<\/strong> Schwarm-, Pwned-, Telemetrie- und URL-Feed-Endpoints schreiben den korrigierten www.bastora.de-Wert einmalig zur\u00fcck in die Options-Tabelle, statt bei jedem Aufruf neu zu korrigieren. Bewusst gesetzte abweichende Werte (Test-Domains, eigene Mirrors) bleiben dabei unangetastet.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li><strong>Onboarding-Bruch geschlossen.<\/strong> Nach Plugin-Aktivierung wird der Admin automatisch in den Wizard geleitet, parallel eine Setup-Erinnerung im Backend gezeigt, plus \u201eEinrichten\"-Link in der Plugins-\u00dcbersicht.<\/li>\n<li><strong>Wizard erweitert.<\/strong> Alle f\u00fcnf Opt-ins (Schwarm, Versions-Abgleich, Schad-URL-Feed, Passwort-Leck-Check, anonyme Statistik) werden im Wizard direkt freigegeben. JS-\u00dcbertragung der zwei neuen Felder Pwned und URL-Feed nachgezogen.<\/li>\n<li><strong>Endpoint-Migration auf www.bastora.de.<\/strong> Schwarm-Register, Pwned-Proxy, Telemetrie-Pipeline und URL-Feed-Pull nutzen jetzt direkt <code>www.bastora.de<\/code>. Behoben: 301-Redirect auf der Bare-Domain hatte POST-Requests in GET verwandelt und damit Schwarm-Aktivierung blockiert.<\/li>\n<li><strong>Dashboard-Status-Karten<\/strong> f\u00fcr Kerndatei-Wache, Plugin\/Theme-Wache, Schwarm und Schad-URL-Liste direkt am Dashboard, nicht mehr in den Einstellungen.<\/li>\n<li><strong>Findings-Kategorien<\/strong> standardm\u00e4\u00dfig eingeklappt, mit Statusanzeige (X offen \/ Y Hinweise \/ alles gr\u00fcn) im Header. Klick auf Summary-Kacheln \u00f6ffnet automatisch die passenden Kategorien.<\/li>\n<li><strong>Telemetrie maximal erweitert.<\/strong> Jetzt mit Plugin-Versionen und Aktiv-Status, Theme-Inventar, aktivem Theme, User-Counts pro Rolle, Content-Aggregaten und WP-Konfigurations-Flags.<\/li>\n<li><strong>Audit-Punkt monitor.03<\/strong> erkennt jetzt das Bastora-eigene Vier-Schichten-Captcha als aktiv, statt es als \u201ekein Captcha\" zu melden.<\/li>\n<li><strong>Pro-Hinweis-Box<\/strong> wegklickbar, eigener Top-Nav-Tab \u201ePro\" mit Verlinkung auf die neue Landing-Page <code>bastora.de\/pro.php<\/code>.<\/li>\n<li><strong>Lange Striche entfernt.<\/strong> Em-Dash und En-Dash aus allen User-facing-Strings und allen Code-Files. Memory <code>feedback_keine_langstriche.md<\/code> gesch\u00e4rft.<\/li>\n<li><strong>Brute-Force-Sperrtext<\/strong> klarer formuliert.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li><strong>Lokale Firewall (WAF).<\/strong> 42 Regeln gegen SQL-Injection, Path-Traversal, RCE, XSS, bekannte WordPress-Exploits und CVE-Marker. Drei Modi: aus, nur protokollieren, blockieren. Default beim Einrichten: protokollieren. Bei aktivem Wordfence, Sucuri, Solid Security, AIOS, MalCare, WP Cerber oder NinjaFirewall zieht sich Bastora automatisch zur\u00fcck. Eigene Hit-Tabelle mit 30 Tagen Retention. Eingeloggte Nutzer werden vor Self-Lockout durch False-Positives gesch\u00fctzt (Block wird zu Log degradiert).<\/li>\n<li><strong>Schadcode-Scanner.<\/strong> T\u00e4glicher Cron + Sofort-Trigger nach manuellem Scan. Pr\u00fcft PHP-Dateien unter wp-content\/themes und wp-content\/uploads gegen einen lokalen Pattern-Katalog (~50 Signaturen: C99, R57, WSO, b374k, IndoXploit, MadSpot, eval(base64_decode), preg_replace mit \/e-Modifier, WP-spezifische Backdoors wie wp_create_user mit User-Input). MD5-Hash-Cache pro Datei verhindert Re-Scan unver\u00e4nderter Dateien. Max 500 Dateien pro Cron-Lauf, Resume-State, 2 MB Max-Dateigr\u00f6\u00dfe. Admin-Mail bei neuen kritischen Funden.<\/li>\n<li><strong>URL-Reputation in Posts und Kommentaren.<\/strong> Hooks in wp_after_insert_post und preprocess_comment. Findet bekannte Spam-\/Phishing-\/Malware-Domains und klassische Bot-Spam-Pattern (Cialis, Casino-Bonus, Crypto-Doubler, IP-URLs, URL-Shortener). Memory-Vorgabe: kein Auto-Reject, nur Audit-Findung.<\/li>\n<li><strong>Block-Rules.<\/strong> Eigene Sperrliste f\u00fcr IP, CIDR (IPv4), Hostname (Reverse-DNS-Substring), User-Agent-Substring und Referrer-Substring. Optionaler Auto-Verfall. Verkehrs-Tabelle hat Quick-Block-Buttons, die direkt eine \/24-Sperre aus einem auff\u00e4lligen Event erzeugen.<\/li>\n<li><strong>Live-Traffic-Log.<\/strong> Sicherheitsrelevante Events (Login-Fail, Login-OK, 404, WAF-Hit, Block-Hit) im Ringbuffer (max 1000 Eintr\u00e4ge). Optionaler all-Modus mit 1\/10-Sampling f\u00fcr jeden Pageview. DSGVO: IP-Adressen werden nicht im Klartext, sondern als rotierender SHA-256-Tagesschl\u00fcssel + \/24- bzw. \/64-Prefix gespeichert.<\/li>\n<li><strong>Eigenes Vier-Schichten-Captcha (ohne Cloud).<\/strong> Honeypot-Feld + Time-Trap (Submit unter 1,5 s wird verworfen) + JavaScript-Proof-of-Work (SHA-256-Mining mit drei Hex-Nullen, ~200 ms im Browser) + Math-Fallback ab dem dritten Login-Fehler. Keine Cookies, keine externen Calls, keine reCAPTCHA-\/Turnstile-Abh\u00e4ngigkeit. Zieht sich bei aktivem Wordfence, Solid Security, AIOS, WP Cerber, Limit Login Attempts, reCAPTCHA-\/Turnstile-Plugins automatisch zur\u00fcck.<\/li>\n<li><strong>Pwned-Passwords-Check (Opt-in).<\/strong> Bei Login von Backend-f\u00e4higen Nutzern wird das Passwort lokal SHA-1-gehasht und nur die ersten 5 Hex-Zeichen an den Bastora-Proxy auf bastora.de geschickt (k-Anonymity, DE-Hosting, 24 h Cache). Bei Treffer: Admin-Notice mit Aufforderung, das Passwort zu \u00e4ndern. Login wird NICHT blockiert, damit niemand sich selbst aussperrt.<\/li>\n<li><strong>Verkehr &amp; Sperren<\/strong> und <strong>Firewall<\/strong> sind eigene Submen\u00fcs unter Bastora. Settings-Bereich um Pwned-Toggle erweitert.<\/li>\n<li><strong>Drei neue Audit-Punkte:<\/strong> <code>system.14<\/code> (Themes ohne Schadcode-Verdacht), <code>system.15<\/code> (Uploads ohne Schadcode-Verdacht), <code>monitor.08<\/code> (Keine Verlinkungen auf bekannte Schadseiten). Punktezahl w\u00e4chst auf 58.<\/li>\n<li><strong>Schad-URL-Feed (Opt-in).<\/strong> Optionaler t\u00e4glicher Pull einer aktualisierten Domain-Liste von <code>bastora.de\/v1\/url-feed\/<\/code> (Quellen: URLhaus + OpenPhish). Lokal verschmolzen mit der eingebauten Startliste, in URL-Watch zus\u00e4tzlich f\u00fcr die Pr\u00fcfung von Beitr\u00e4gen und Kommentaren genutzt. Hard-Cap 50 000 Eintr\u00e4ge lokal, 30 Tage TTL. Standardm\u00e4\u00dfig aus, aktives H\u00e4kchen in den Einstellungen.<\/li>\n<li><strong>Aktivit\u00e4ts-Log f\u00fcr WordPress-Aktionen.<\/strong> Eigene Tabelle mit User-Erstellung, Rollen-Wechsel, Plugin-\/Theme-Installation, Updates, Admin-Logins. 90 Tage Aufbewahrung, IP-Adressen DSGVO-konform als \/24- bzw. \/64-Prefix plus rotierender Tagessalt. Eigenes Submen\u00fc \u201eAktivit\u00e4t\" mit Filter pro Ereignistyp.<\/li>\n<li><strong>WP-CLI-Integration.<\/strong> <code>wp bastora scan\/status<\/code>, <code>wp bastora waf [--mode=\u2026]<\/code>, <code>wp bastora blocks list\/add\/delete<\/code>, <code>wp bastora content-scan<\/code>, <code>wp bastora url-feed pull\/status<\/code>, <code>wp bastora swarm enable\/disable\/status<\/code>.<\/li>\n<li><strong>Datei-Inspektor mit Side-by-Side-Diff.<\/strong> Bei Asset-Integrity-Funden in Plugins oder Themes l\u00e4sst sich die ver\u00e4nderte Datei direkt im Browser gegen das offizielle Original auf wordpress.org vergleichen. Nutzt den vorhandenen ZIP-Cache der Asset-Wache, kein zus\u00e4tzlicher Cloud-Lookup.<\/li>\n<li><strong>Anonyme Sicherheits-Telemetrie real (Opt-in).<\/strong> Statt nur die Zustimmung \u201evorzumerken\" sendet Bastora ab dem H\u00e4kchen sofort eine erste anonyme Statistik an <code>bastora.de\/v1\/telemetry\/<\/code> und danach einmal pro Tag. Keine Domain, keine IP, keine User-Daten. Pro Site-ID maximal ein Datensatz pro Tag.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li><strong>Neuer Audit-Punkt <code>system.12<\/code>, Plugin-Integrity-Abgleich gegen wordpress.org.<\/strong> Bastora vergleicht t\u00e4glich (Cron) und nach jedem manuellen Scan alle installierten Plugins gegen die offizielle ZIP im WordPress.org-Repository. Gepr\u00fcft werden alle Dateien, die im Original enthalten sind, per MD5-Hash. Ver\u00e4nderte oder fehlende Dateien werden im Audit als kritisch ausgewiesen, der typische Indikator f\u00fcr Backdoor-Code, der in ein vorhandenes Plugin eingeschleust wurde.<\/li>\n<li><strong>Neuer Audit-Punkt <code>system.13<\/code>, Theme-Integrity-Abgleich gegen wordpress.org.<\/strong> Analog f\u00fcr alle installierten Themes.<\/li>\n<li>Punktezahl w\u00e4chst von 53 auf 55. Systemabsicherung-Kategorie hat jetzt 13 statt 11 Punkte.<\/li>\n<li>Auto-Reparatur bewusst NICHT eingebaut. Plugins und Themes schreiben legitim Daten in ihre Verzeichnisse (Settings-Files, Caches, generierte Assets), eine automatische \u00dcberschreibung w\u00fcrde harmlose \u00c4nderungen zerst\u00f6ren. Bastora meldet ausschlie\u00dflich und schickt eine Admin-Mail.<\/li>\n<li>Plugins\/Themes, die NICHT im WordPress.org-Repository liegen (Premium, Custom), werden als \u201eextern, nicht pr\u00fcfbar\" markiert. Der API-Lookup wird 24 Stunden negativ gecached, damit kein wiederholter 404 erzeugt wird.<\/li>\n<li>Quellen ausschlie\u00dflich aus dem offiziellen WordPress.org-Repository: <code>plugins_api()<\/code>\/<code>themes_api()<\/code> (WP-Core-Funktionen, also <code>api.wordpress.org\/plugins\/info\/1.2\/<\/code> und <code>api.wordpress.org\/themes\/info\/1.2\/<\/code>) plus <code>downloads.wordpress.org\/plugin|theme\/&lt;slug&gt;.&lt;version&gt;.zip<\/code>. Es findet kein Aufruf an kommerzielle Dritt-APIs statt.<\/li>\n<li>Neuer Admin-Block \u201ePlugin- und Theme-Wache\" in den Einstellungen mit Status, Z\u00e4hler-\u00dcbersicht und Detail-Liste der abweichenden Dateien.<\/li>\n<li>Eigener Single-Event-Hook f\u00fcr Sofort-Trigger nach manuellem Scan (Lehre aus Kerndatei-Wache: <code>wp_next_scheduled<\/code> w\u00fcrde sonst durch den t\u00e4glichen Hauptlauf blockiert).<\/li>\n<li>ZIP-Cache wird automatisch aufger\u00e4umt, sobald ein Plugin\/Theme deinstalliert oder geupdated wurde.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li><strong>Neuer Bastora-Schwarm (opt-in).<\/strong> Brute-Force-Angreifer werden anonym zwischen teilnehmenden Bastora-Sites geteilt. Erkennt eine Site einen Login-Bruteforce, schickt sie die Angreifer-IP an <code>bastora.de\/api\/swarm-report.php<\/code>. Andere teilnehmende Sites holen die Sperrliste \u00fcber <code>bastora.de\/api\/swarm-feed.php<\/code> ab und blockieren die IP vorbeugend. Aktivierung im Onboarding-Wizard (dritte Opt-in-Karte) oder unter \u201eEinstellungen \u2192 Bastora-Schwarm\".<\/li>\n<li>Versendet werden ausschlie\u00dflich die Angreifer-IP, der Angriffs-Typ, die Plugin-Version und ein anonymer UUID-Token. Domain, Besucher-IPs, Owner-Daten und Benutzernamen bleiben auf Deinem Server. Der HTTP-User-Agent ist statisch (\u201eBastora-Swarm\/Version\"), damit WordPress die Domain nicht \u00fcber den Default-UA mitschickt.<\/li>\n<li>Bekannte Crawler (Googlebot, Bingbot, Cloudflare-Edges, Yandex, WordPress.org) werden serverseitig nie in die Sperrliste \u00fcbernommen, damit echte Suchmaschinen niemals geblockt werden.<\/li>\n<li>Threshold-Logik: eine IP wird erst propagiert, wenn entweder ein einzelner Token sie \u22655 mal meldet ODER mindestens 2 unabh\u00e4ngige Tokens sie je \u22651 mal melden. Verhindert, dass eine kompromittierte Site die Sperrliste vergiften kann.<\/li>\n<li>Sperrlisten-Eintr\u00e4ge verfallen 72 Stunden nach der letzten Meldung. Token k\u00f6nnen jederzeit \u00fcber Einstellungen \u2192 Deaktivieren abgemeldet werden, der Server l\u00f6scht den Token unmittelbar.<\/li>\n<li>Drei neue Server-Endpoints in der Privacy-Sektion vollst\u00e4ndig dokumentiert (Register, Report, Feed, Disconnect).<\/li>\n<li>Beim Deinstallieren des Plugins wird der Token best-effort beim Schwarm-Server abgemeldet, bevor lokale Optionen gel\u00f6scht werden.<\/li>\n<\/ul>\n\n<h4>0.2.9<\/h4>\n\n<ul>\n<li>Code-Review-Pass nach der Berichts-Entfernung. Verbliebene Referenzen auf die alte Berichts-Klasse gepr\u00fcft (keine gefunden), Doc-Kommentar zur Kategorien-Reihenfolge auf die jetzigen Ausgaben (Dashboard-Liste, Onboarding-Card) umgeschrieben.<\/li>\n<\/ul>\n\n<h4>0.2.8<\/h4>\n\n<ul>\n<li><strong>Druckbarer HTML-Bericht entfernt.<\/strong> Der \u201eBericht \u00f6ffnen\"-Knopf im Dashboard und die Bericht-Sektion in den Einstellungen sind raus. Der vollst\u00e4ndige, gedruckte Sicherheitsbericht bleibt dem Bastora-Schutz-Service vorbehalten. Das Plugin zeigt das Scan-Ergebnis weiterhin als interaktive Liste im Dashboard, alle 53 Audit-Punkte mit Ampel, Klartext-Erkl\u00e4rung und Werkstatt-Link.<\/li>\n<li>Berichts-Klasse, Berichts-Stylesheet und Berichts-Skript komplett aus dem Plugin entfernt, kleineres Plugin-Paket.<\/li>\n<\/ul>\n\n<h4>0.2.7<\/h4>\n\n<ul>\n<li><strong>Klickbare Status-Kacheln als Filter.<\/strong> Klick auf eine der vier Kacheln im Dashboard (Bestanden, Hinweis, Offen, Nicht pr\u00fcfbar) filtert die Audit-Liste auf nur diesen Status. Erneuter Klick hebt den Filter wieder auf. Es ist immer nur ein Filter aktiv.<\/li>\n<li><strong>Werkstatt-Link pro Audit-Punkt.<\/strong> Jeder Audit-Punkt zeigt einen kleinen \u201eL\u00f6sung in der Werkstatt \u2192\"-Link, der direkt zum passenden Artikel auf bastora.de\/werkstatt mit Schritt-f\u00fcr-Schritt-Anleitung f\u00fchrt. 52 von 53 Punkten haben einen Einzel-Artikel, der Rest f\u00e4llt auf die Werkstatt-\u00dcbersicht zur\u00fcck.<\/li>\n<li><strong>Klartext-Hinweis bei offenen Punkten.<\/strong> Wenn der Audit offene oder Hinweis-Punkte zeigt, erkl\u00e4rt Bastora jetzt sichtbar im Dashboard, warum manche L\u00fccken nicht im Plugin geschlossen werden k\u00f6nnen (Server-Punkte wie .htaccess, Dateirechte, Security-Header brauchen Hosting-Zugang) und verlinkt auf den Bastora-Schutz-Service als Option.<\/li>\n<li><strong>Wizard-H\u00e4kchen harmonisiert.<\/strong> Das Opt-in-H\u00e4kchen hei\u00dft jetzt \u00fcberall (Wizard + Einstellungen + readme.txt) konsistent \u201eVersions-Abgleich erlauben\". Der Hilfetext im Wizard nennt jetzt auch explizit den Kerndatei-Auto-Repair als Folge, vorher las sich das wie ein reiner Plugin-Update-Check.<\/li>\n<\/ul>\n\n<h4>0.2.6<\/h4>\n\n<ul>\n<li><strong>Bugfix, Sofort-Trigger nach manuellem Scan funktioniert jetzt wirklich.<\/strong> In 0.2.5 pr\u00fcfte der Sofort-Trigger f\u00e4lschlich auf denselben Hook wie der t\u00e4gliche Cron, der t\u00e4gliche war meist eingeplant, also wurde der Sofort-Job nie geplant. Jetzt eigener Single-Event-Hook (<code>bastora_core_integrity_oneshot<\/code>), der unabh\u00e4ngig l\u00e4uft.<\/li>\n<li><strong>Bugfix, Cron l\u00e4uft auch bei stillen Plugin-Updates an.<\/strong> Bestehende Installationen, die per Auto-Update auf 0.2.5 wechseln, bekamen den t\u00e4glichen Cron nicht eingeplant, weil der Activation-Hook nicht feuert. Ab 0.2.6 stellt das Plugin bei jedem <code>plugins_loaded<\/code> defensiv sicher, dass der Cron im Schedule liegt.<\/li>\n<li><strong>Bugfix, Fataler Fehler ohne PHP-ZIP-Extension verhindert.<\/strong> Wenn die <code>ZipArchive<\/code>-Klasse auf dem Hoster fehlt, gibt Bastora jetzt einen sauberen Fehlerstatus zur\u00fcck, statt den Cron-Lauf abzubrechen.<\/li>\n<li><strong>Bugfix, Admin-Mail bei ZIP-Download-Fehler.<\/strong> Konnte die offizielle WordPress-ZIP nicht geladen werden (Beta-Versionen, Netzwerk-Aussetzer), erfuhr der Admin bisher nichts. Jetzt geht eine eigene Mail raus mit Liste der erkannten Dateien.<\/li>\n<li><strong>Auto-Cleanup des ZIP-Caches bei WordPress-Updates.<\/strong> Beim WP-Update wandert der alte ZIP-Cache jetzt sofort in den M\u00fcll, statt 7 Tage als 25-MB-Leiche liegen zu bleiben.<\/li>\n<li><strong>Neuer Admin-Block: \u201eKerndatei-Wache\" im Einstellungen-Tab.<\/strong> Zeigt den letzten Repair-Status mit Zeitstempel und die letzten drei Repair-Vorg\u00e4nge mit reparierten Dateinamen. Damit ist die Wache im Backend sichtbar, nicht nur in der Mail.<\/li>\n<li>Hinweis: Auf Sites ohne regelm\u00e4\u00dfigen Traffic l\u00e4uft der WordPress-Cron seltener. Bei sehr stillen Sites bitte einen externen Cron-Trigger einrichten (z.B. den eigenen Hoster-Cronjob), sonst kann sich der t\u00e4gliche Repair-Lauf verz\u00f6gern.<\/li>\n<\/ul>\n\n<h4>0.2.5<\/h4>\n\n<ul>\n<li><strong>Auto-Reparatur manipulierter Kerndateien.<\/strong> Der in 0.2.4 eingef\u00fchrte Kerndatei-Abgleich repariert ab jetzt automatisch. T\u00e4glicher Cron-Job (<code>bastora_core_integrity_run<\/code>) holt die offiziellen Datei-Hashes von <code>api.wordpress.org\/core\/checksums\/1.0\/<\/code>, identifiziert ver\u00e4nderte oder fehlende Kerndateien und ersetzt sie durch die saubere Originalversion aus der offiziellen WordPress-ZIP (<code>downloads.wordpress.org\/release\/wordpress-X.Y.Z.zip<\/code>). Die ZIP wird einmal pro Version 7 Tage lokal gecacht, betroffene Dateien werden einzeln extrahiert. Vor dem Ersetzen pr\u00fcft Bastora den MD5-Hash der extrahierten Datei gegen den erwarteten Wert (Doppel-Sicherung gegen Download-Pannen oder Manipulation der ZIP). Die kompromittierte Originaldatei wandert zur Spurensicherung in <code>wp-content\/uploads\/bastora-quarantine\/JJJJ-MM-TT\/<\/code>. Admin bekommt eine Mail mit der Liste der reparierten Dateien.<\/li>\n<li>Sofort-Trigger nach manuellem Scan: Wenn Du im Dashboard scannst und Bastora dabei manipulierte Kerndateien entdeckt, plant der Plugin einen Single-Event-Cron in 5 Sekunden, die Reparatur l\u00e4uft im Hintergrund, ohne den Scan-Request zu blockieren.<\/li>\n<li>Lock-File gegen parallele Repair-L\u00e4ufe (<code>wp-content\/uploads\/bastora-quarantine\/.bastora-repair-lock<\/code>, 10 Minuten G\u00fcltigkeit).<\/li>\n<li>Hoster-Schreibrechte-Erkennung: Wenn der Hoster keinen Schreibzugriff auf das Quarant\u00e4ne-Verzeichnis erlaubt, f\u00e4llt Bastora elegant auf Anzeige + Admin-Mail zur\u00fcck.<\/li>\n<li>Quarant\u00e4ne-Verzeichnis wird per <code>.htaccess<\/code> (Deny from all) gegen Web-Zugriff gesch\u00fctzt.<\/li>\n<li>Privacy-Sektion erweitert um den neuen ZIP-Download-Endpoint.<\/li>\n<\/ul>\n\n<h4>0.2.4<\/h4>\n\n<ul>\n<li><strong>Neuer Audit-Punkt <code>system.11<\/code>, Abgleich der WordPress-Kerndateien gegen das offizielle Original.<\/strong> Bastora holt sich von <code>api.wordpress.org\/core\/checksums\/1.0\/<\/code> die digitalen Fingerabdr\u00fccke aller Core-Dateien Deiner WordPress-Version und vergleicht sie mit den Dateien auf Deinem Server. Ver\u00e4nderte oder fehlende Kerndateien werden im Audit-Bericht als kritisch ausgewiesen, der typische Indikator f\u00fcr eingeschleusten Schadcode. Bewusst NICHT gepr\u00fcft: <code>wp-content\/<\/code>, <code>wp-config.php<\/code>, <code>readme.html<\/code>, <code>license.txt<\/code>. Voraussetzung: Versions-Abgleich-Opt-in aktiv (gleiche Checkbox wie f\u00fcr die Update-Punkte). Ergebnis wird pro WP-Version 24 Stunden zwischengespeichert.<\/li>\n<li>Punktezahl w\u00e4chst von 52 auf 53 Punkte. Systemabsicherung-Kategorie hat jetzt 11 statt 10 Punkte.<\/li>\n<li>Privacy-Sektion in der readme.txt um den neuen Checksums-Endpoint erweitert.<\/li>\n<\/ul>\n\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>Plugin-Header-Beschreibung und readme.txt auf Deutsch \u00fcbersetzt, Plugin-Listing-Seite auf wordpress.org ist damit f\u00fcr die deutsche Zielgruppe lesbar.<\/li>\n<li>Screenshots-Sektion wieder aufgenommen, vier Bilder erg\u00e4nzt (Scan-Start, Scan-Ergebnis, H\u00e4rtung scharf schalten, Dashboard).<\/li>\n<li>Plugin-Assets (Icon, Banner) im WP.org-Plugin-Verzeichnis aktualisiert.<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Plugin Review Team feedback: all paid-tier markers removed. The dead <code>premium_only_ids()<\/code> list, the dashboard upsell block, the report's premium section and the wizard's paid-service step are gone. The wizard now has three steps (opt-in \u2192 scan \u2192 activation). No more references to a paid tier inside the plugin code, the admin UI or the printable report.<\/li>\n<li>Conflict-check marker constant renamed from <code>BASTORA_PRO_SECURITY_LAYER_VERSION<\/code> to <code>BASTORA_MANAGED_LAYER_VERSION<\/code> (neutral naming, no Pro\/Premium connotation).<\/li>\n<li>readme.txt: paid-service section removed.<\/li>\n<li>Telemetry consistency: the opt-in toggle in the welcome wizard and in settings now clearly states that the bastora.de sender pipeline is <strong>not active in this plugin version<\/strong>, the toggle only records consent for a future release. readme.txt Privacy section aligned to match.<\/li>\n<li>Scanner: <code>check_monitor_03<\/code> (captcha plugins detection) and <code>check_monitor_07<\/code> (security plugin detection) now read <code>active_plugins<\/code> directly from the option instead of loading <code>wp-admin\/includes\/plugin.php<\/code>. One less <code>require_once<\/code> of a core file.<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Plugin-Name auf \u201eBastora Security Audit\" gek\u00fcrzt (deckungsgleich mit dem Slug, kein Sonderzeichen im Header).<\/li>\n<li><code>Donate link<\/code> aus <code>readme.txt<\/code> entfernt (verwies auf die Produktseite, keine echte Spenden-URL).<\/li>\n<li><code>== Screenshots ==<\/code>-Sektion tempor\u00e4r aus <code>readme.txt<\/code> entfernt. Wird wieder aufgenommen, sobald die Bilder im WordPress-Assets-Verzeichnis liegen.<\/li>\n<li>MU-Plugin-Konflikt-Check liest jetzt zus\u00e4tzlich eine Marker-Konstante. Quellcode-Kommentar produktneutral formuliert.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Neuer Onboarding-Wizard mit schrittweiser Aktivierung der H\u00e4rtungen plus Vorher-Nachher-Vergleich.<\/li>\n<li>H\u00e4rtungen werden erst nach dem ersten Klick auf \u201eJetzt absichern\" im Wizard scharf geschaltet. Davor l\u00e4uft das Plugin im reinen Mess-Modus.<\/li>\n<li>Bisheriges Welcome-Banner mit Zwei-H\u00e4kchen-Block durch den Wizard ersetzt.<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Plugin Review Team-Feedback: <code>Author URI<\/code> aus dem Plugin-Header entfernt, da identisch mit <code>Plugin URI<\/code>. Nur noch eine URI im Header.<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Welcome-Banner und Bericht: Inline-<code>onclick<\/code>-Handler durch enqueued JavaScript ersetzt (<code>assets\/admin.js<\/code>, <code>assets\/js\/report.js<\/code>).<\/li>\n<li>Inline-<code>style<\/code>-Attribute im Welcome-Banner und im Login-Honeypot in Utility-Klassen (<code>assets\/admin.css<\/code>, <code>assets\/css\/login-honeypot.css<\/code>) ausgelagert.<\/li>\n<li>Men\u00fc-Icon nutzt jetzt das WordPress-Standard-Dashicon <code>dashicons-shield<\/code> statt eines <code>base64<\/code>-Inline-SVG.<\/li>\n<li><code>$_POST<\/code>-Werte im Welcome- und Settings-Handler durchlaufen jetzt zus\u00e4tzlich <code>wp_unslash<\/code> + <code>sanitize_text_field<\/code>, auch wenn sie nur als Bool genutzt werden.<\/li>\n<li>Plugin-Header um <code>Author URI<\/code> und <code>Domain Path<\/code> erg\u00e4nzt.<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Konflikt-Check liest die aktiven Plugins direkt aus der <code>active_plugins<\/code>-Option und l\u00e4dt <code>wp-admin\/includes\/plugin.php<\/code> nicht mehr unn\u00f6tig. Vermeidet einen <code>require_once<\/code> ohne unmittelbar folgenden Funktions-Aufruf.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Konflikt-Check erkennt jetzt auch MU-Plugin-basierte Sicherheits-Schichten (Marker-Konstanten\/Funktionen). Plugin zieht sich automatisch in den \u00fcberlappenden Bereichen zur\u00fcck (XML-RPC, REST users, Security Headers, Brute-Force, Honeypot, Application Passwords), damit Filter nicht doppelt feuern und der Bastora-Honeypot auf Whitelabel-Sites unsichtbar bleibt.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>External version-check calls to api.wordpress.org are now opt-in by default. Welcome banner uses two separate checkboxes (external calls + anonymous statistics), each independently toggleable in the settings page.<\/li>\n<li>Update-related audit points (update.06, update.07, monitor.04) report \"not checkable\" when the user has not enabled external calls.<\/li>\n<li>Privacy section in readme.txt expanded with the exact endpoint URLs and opt-in mechanics.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Text domain aligned with plugin slug (bastora-security-audit)<\/li>\n<li>Printable report CSS moved from inline style to enqueued stylesheet<\/li>\n<li>Contributors list corrected to plugin author account<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Scanner covering all 52 audit points<\/li>\n<li>11 conflict-aware filter hardenings<\/li>\n<li>Conflict detection for 13 known security plugins<\/li>\n<li>Admin dashboard with status card, findings list and hardening overview<\/li>\n<\/ul>","raw_excerpt":"58-Punkte-Sicherheits-Check mit lokaler Firewall, Schadcode-Scanner, URL-Reputation, eigenem Captcha, Schwarm-Schutz und Auto-Reparatur der WordPress- &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/316373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=316373"}],"author":[{"embeddable":true,"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mathiasva"}],"wp:attachment":[{"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=316373"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=316373"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=316373"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=316373"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=316373"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=316373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}