{"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-22T11:06:42","modified_gmt":"2026-06-22T11:06:42","slug":"bastora-security-audit","status":"publish","type":"plugin","link":"https:\/\/da.wordpress.org\/plugins\/bastora-security-audit\/","author":22020153,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.0","stable_tag":"0.3.0","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-22 11:06:42","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":222,"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"}},"upgrade_notice":{"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 \u2014 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 \u2014 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 \u2014 verhindert Filter-Doppelung und Whitelabel-Br\u00fcche.<\/p>","0.1.2":"<p>External calls to api.wordpress.org are now opt-in by default \u2014 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"],"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 \u2014 Bastora pr\u00fcft 53 Sicherheitspunkte in etwa 20 Sekunden.","2":"Ergebnis des ersten Scans: Score plus klare Aufteilung in bestanden, Hinweise und offene Punkte.","3":"Bastora schaltet die H\u00e4rtungen scharf \u2014 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":[8533,2439,31093,602,600],"plugin_category":[38,54],"plugin_contributors":[266569],"plugin_business_model":[],"class_list":["post-316373","plugin","type-plugin","status-publish","hentry","plugin_tags-audit","plugin_tags-brute-force","plugin_tags-hardening","plugin_tags-login","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 \u2014 Bastora pr\u00fcft 53 Sicherheitspunkte in etwa 20 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 \u2014 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>53 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 (11 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><\/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 \u2014 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 (geplant, in dieser Version noch nicht aktiv)<\/h4>\n\n<p>Eine k\u00fcnftige Plugin-Version wird optionale anonyme Sicherheits-Telemetrie an bastora.de anbieten. <strong>In dieser Plugin-Version wird keine Telemetrie gesendet. Der Opt-in-Schalter speichert nur Deine Zustimmung f\u00fcr ein sp\u00e4teres Release.<\/strong> Wenn die Versand-Pipeline sp\u00e4ter live geht, w\u00fcrden ausschlie\u00dflich folgende anonymisierten technischen Werte \u00fcbertragen:<\/p>\n\n<ul>\n<li>WordPress-, PHP- und MySQL-Versions-Strings<\/li>\n<li>Locale (zum Beispiel de_DE)<\/li>\n<li>Liste der installierten Plugin-Slugs (ohne Versionen)<\/li>\n<li>Audit-Ergebnisse (welche der 53 Punkte sind rot, gelb, gr\u00fcn)<\/li>\n<li>Eine zuf\u00e4llige anonyme Site-ID (UUID), lokal beim ersten Plugin-Start erzeugt<\/li>\n<\/ul>\n\n<p>Was <strong>nie<\/strong> \u00fcbertragen w\u00fcrde: Domain, URL, IP-Adressen, E-Mail-Adressen, Benutzernamen, Beitragsinhalte, Dateiinhalte.<\/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>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> \u2014 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> \u2014 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> \u2014 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> \u2014 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>3. Anonyme Telemetrie an bastora.de (geplant, in dieser Version nicht aktiv)<\/strong><\/p>\n\n<p>Eine k\u00fcnftige Plugin-Version soll optionale anonymisierte Audit-Telemetrie an bastora.de anbieten. <strong>In dieser Plugin-Version ist diese Pipeline nicht implementiert \u2014 kein <code>wp_remote_post<\/code> an einen Telemetrie-Endpoint, kein Audit-Payload, keine \u00dcbertragung von Scan-Ergebnissen an bastora.de findet im Code statt.<\/strong> Der Opt-in-Schalter in den Einstellungen speichert nur Deine Zustimmung f\u00fcr ein sp\u00e4teres Release.<\/p>\n\n<p>Wenn die Versand-Pipeline in einem sp\u00e4teren Release live geht, w\u00fcrden die folgenden anonymisierten Werte \u00fcbertragen:<\/p>\n\n<ul>\n<li>WordPress-, PHP- und MySQL-Versions-Strings<\/li>\n<li>Locale-Code (zum Beispiel de_DE)<\/li>\n<li>Liste der installierten Plugin-Slugs (ohne Versionen)<\/li>\n<li>Theme-Slug des aktiven Themes<\/li>\n<li>Audit-Ergebnisse: pro Sicherheitspunkt der Status (passed \/ warning \/ failed)<\/li>\n<li>Eine zuf\u00e4llige anonyme Site-ID (UUID), lokal beim ersten Plugin-Start erzeugt<\/li>\n<\/ul>\n\n<p>Was <strong>nie<\/strong> \u00fcbertragen w\u00fcrde: Domain, URL, IP-Adressen, E-Mail-Adressen, Benutzernamen, Beitragsinhalte, Dateiinhalte, Datenbankinhalte.<\/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 \u2014 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. Die einzigen externen Verbindungen, die diese Version macht, sind opt-in-Versions-Abgleiche gegen api.wordpress.org (nur der Slug, keine Domain, keine Nutzerdaten). Die anonyme Statistik-Pipeline an bastora.de ist <strong>in dieser Version nicht aktiv<\/strong> \u2014 der Opt-in-Schalter in den Einstellungen speichert nur Deine Zustimmung f\u00fcr ein sp\u00e4teres Release.<\/p><\/dd>\n<dt id=\"wie%20nehme%20ich%20die%20statistik-zustimmung%20wieder%20zur%C3%BCck%3F\"><h3>Wie nehme ich die Statistik-Zustimmung wieder zur\u00fcck?<\/h3><\/dt>\n<dd><p>Bastora \u2192 Einstellungen \u2192 Haken bei \u201eZustimmung vormerken\" raus \u2192 speichern. Da in dieser Plugin-Version keine Daten gesendet werden, l\u00f6scht das Zur\u00fccknehmen einfach die gespeicherte Zustimmung.<\/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>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 \u2014 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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 \u2014 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) \u2014 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 \u2014 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> \u2014 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 \u2014 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 \u2014 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":"Ehrlicher 53-Punkte-Sicherheits-Check f\u00fcr WordPress mit optionalem Schwarm-Schutz: Brute-Force-Angreifer werden zwischen teilnehmenden Sites anonym ge &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/316373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=316373"}],"author":[{"embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mathiasva"}],"wp:attachment":[{"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=316373"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=316373"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=316373"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=316373"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=316373"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/da.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=316373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}