=== Booker Privacy Spam Guard ===
Contributors: bookergroup
Tags: elementor, spam protection, gdpr, honeypot, forms
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.6.6
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Leichtgewichtiger, datensparsamer Spamschutz speziell für Elementor-Formulare – ohne Google, ohne US-Captcha-Dienste und ohne Cookies.

== Description ==

Booker Privacy Spam Guard schützt Elementor-Formulare und das native WordPress-Kommentarformular vor Spam, ohne dabei personenbezogene Daten unnötig zu verarbeiten. Das Plugin ist gezielt für Elementor-Nutzer gebaut: Das klassische Elementor Pro Form-Widget erhält den vollen Funktionsumfang, und das WordPress-Kommentarformular ist ebenfalls abgedeckt. Das neue Atomic Form-Widget erhält Inhaltsprüfung, Rate-Limiting, Auto-Ban und lokale Proof-of-Work auf Basis der globalen Standard-Schutzstufe; Honeypot- und Zeitprüfung je Formular sind in dessen neuerem Editor-Control-System noch nicht verfügbar.

* Unsichtbares Honeypot-Feld mit zufälligem, pro Installation einzigartigem Feldnamen
* Zeitbasierte Plausibilitätsprüfung über ein signiertes, manipulationssicheres Zeitfenster
* Serverseitige Nonce-Integritätsprüfung je Formular
* Content-Heuristik: blockiert Einträge mit zu vielen Links oder eigenen Spam-Schlüsselwörtern
* Rate-Limiting anhand eines pseudonymen, täglich rotierenden Fingerprints (keine Rohdaten wie IP-Adressen werden gespeichert)
* Automatische Sperre für Fingerprints, die wiederholt auffällig wurden (Schwelle und Zeitfenster einstellbar)
* Lokale adaptive SHA-256-Proof-of-Work-Challenge ohne externen Dienst, Cookies oder sichtbares Rätsel
* Individuelle Schutzstufen je Formular (Aus / Basis / Standard / Streng)
* Statistik-Übersicht mit Verlaufs-Diagramm der letzten 14 Tage sowie einer Liste blockierter Anfragen im WordPress-Backend
* Fertiger Textbaustein für die eigene Datenschutzerklärung, inklusive Anbindung an den WordPress-eigenen Datenschutz-Assistenten
* Konfigurierbare Client-IP-Ermittlung für Seiten hinter Reverse-Proxy, Load-Balancer oder CDN (z. B. Cloudflare), inklusive Trusted-Proxy-Liste als Schutz vor gefälschten Angaben
* Cache- und CDN-tauglich: Zeit-Token und Nonce werden beim Seitenaufbau aus einem nicht gecachten Endpunkt frisch nachgeladen, sodass Full-Page- oder Edge-Caches Besuchern nie ein abgelaufenes Token ausliefern
* Keine Cookies, keine externen Requests, keine Abo-Kosten

Der integrierte lokale Proof-of-Work-Provider verwendet die vorhandenen Challenge-Erweiterungspunkte; alternative Provider können über dieselbe Schnittstelle registriert werden.

Hinweis: Die datensparsame, datenschutzfreundliche Bauweise des Plugins macht deine gesamte Website nicht von allein rechtskonform – das hängt von vielen weiteren Faktoren ab und liegt in deiner Verantwortung.

== Installation ==

1. Plugin-Ordner nach `wp-content/plugins/` hochladen oder als ZIP über das Backend installieren.
2. Plugin aktivieren.
3. Elementor (kostenlos oder Pro) muss aktiv sein; die eigentliche Formular-Verarbeitung erfordert Elementor Pro.
4. Unter „Booker Tools" → „Privacy Spam Guard" → Tab „Einstellungen" die Standard-Schutzstufe, den Proof-of-Work-Modus, die Aufbewahrungsdauer, eigene Spam-Schlüsselwörter und die Auto-Ban-Schwelle festlegen.
5. Im Elementor-Editor kann je Formular unter „Zusätzliche Optionen" die Schutzstufe individuell angepasst werden.
6. Den Textbaustein für die Datenschutzerklärung unten auf der Einstellungsseite kopieren oder über Einstellungen → Datenschutz → „Neuen Vorschlag laden" in die eigene Datenschutzseite übernehmen.

== Frequently Asked Questions ==

= Werden Cookies gesetzt? =
Nein. Die Fingerprint-Bildung erfolgt ausschließlich serverseitig aus einer gekürzten IP-Adresse, dem User-Agent und einem täglich neu abgeleiteten geheimen Wert – ohne Cookies oder Local Storage. Als Online-Kennung sollte der Fingerprint dennoch als pseudonymes Datum behandelt werden.

= Werden Daten an Drittanbieter übermittelt? =
Nein. Es finden keine externen HTTP-Requests statt.

= Warum sehe ich keinen Effekt ohne Elementor Pro? =
Die eigentliche Formular-Verarbeitung (Absenden, Validierung, Versand) ist Teil von Elementor Pro. Ohne aktives Elementor Pro registriert das Plugin keine seiner Prüfungen für Elementor-Formulare. Das native WordPress-Kommentarformular wird trotzdem geschützt.

= Was passiert bei einer automatischen Sperre? =
Wird ein pseudonymer Fingerprint innerhalb des eingestellten Zeitfensters (Standard: 24 Stunden) öfter als die eingestellte Schwelle (Standard: 8) blockiert, werden weitere Anfragen von ihm automatisch abgelehnt – unabhängig davon, ob eine einzelne Anfrage für sich genommen unauffällig wäre. Die täglichen Fingerprints innerhalb des rollierenden Fensters werden dabei auch über UTC-Tagesgrenzen hinweg gemeinsam geprüft. Die Sperre läuft von selbst aus, sobald die alten Einträge aus dem Zeitfenster fallen; sie kann in den Einstellungen deaktiviert oder angepasst werden.

= Sind Nonce und Zeit-Token ein CAPTCHA-Ersatz? =
Nein. Sie weisen fehlerhafte Anfragen und einfache automatisierte Absendungen ab, müssen für echte Besucher auf öffentlichen und gecachten Seiten aber verfügbar sein und sind daher keine Geheimnisse. Die lokale Proof-of-Work-Challenge ergänzt eine kurzlebige, an Formular und Fingerprint gebundene Berechnung, die Wiederverwendung und Massenabsendungen verteuert. Honeypot, Inhaltsprüfung, Rate-Limiting und Auto-Ban bleiben weitere Schutzschichten.

= Benötigt Proof-of-Work JavaScript? =
Ja. Wenn die lokale Proof-of-Work-Challenge aktiviert ist, benötigen Besucher JavaScript, um ein geschütztes Formular abzusenden. Die Berechnung läuft in einem Web Worker, damit die Seite reaktionsfähig bleibt. Falls ein Absendeweg ohne JavaScript erforderlich ist, kann die Challenge in den Plugin-Einstellungen deaktiviert werden.

= Ist der Textbaustein für die Datenschutzerklärung rechtsverbindlich? =
Nein, er ist ein Formulierungsvorschlag, keine Rechtsberatung. Bitte vor der Übernahme prüfen und an die eigene Datenschutzerklärung anpassen.

= Bedeutet „GDPR", dass meine Website automatisch DSGVO-konform ist? =
Nein. Das Plugin ist so gebaut, dass es selbst besonders datensparsam arbeitet (keine Cookies, keine externen Dienste, pseudonyme tägliche Fingerprints). Die rechtliche Konformität deiner gesamten Website hängt aber von vielen weiteren Faktoren ab und liegt in deiner Verantwortung.

= Meine Seite läuft hinter Cloudflare oder einem Reverse-Proxy. Was muss ich einstellen? =
In den Einstellungen „IP-Ermittlung" auf den passenden Header setzen (z. B. CF-Connecting-IP bei Cloudflare) und die IP-Adressen bzw. -Bereiche deines Proxys in die Trusted-Proxy-Liste eintragen. Ein weitergeleiteter Header wird nur dann ausgewertet, wenn die Anfrage von einer dieser Adressen stammt – so können Angreifer keine IPs vortäuschen, um das Rate-Limiting zu umgehen.

== Screenshots ==

1. Statistik-Übersicht mit Verlaufsdiagramm der letzten 14 Tage und Liste der zuletzt blockierten Anfragen.
2. Einstellungen: Standard-Schutzstufe, Spam-Schlüsselwörter, automatische Sperre sowie Proxy-/IP-Optionen.
3. Individuelle Schutzstufe je Formular direkt im Elementor-Editor.

== Changelog ==

= 1.6.6 =
* Behoben: Admin-Styles und -Skripte verwenden jetzt die tatsächlich von WordPress zurückgegebenen Seiten-Hooks und werden nach der Umstellung des Menü-Präfixes zuverlässig geladen.

= 1.6.5 =
* WordPress.org-Kompatibilität: Deklarationen, gespeicherte Daten, REST-Routen, Script-Handles und Browser-Globals verwenden jetzt durchgängig das eindeutige Präfix `bookprsp`.
* Kompatibilität: Vorhandene Einstellungen, Fingerprint-Geheimnisse, Honeypot-Zustand und Statistiken werden automatisch vom bisherigen Kurzpräfix übernommen.
* Internationalisierung: Sprachspezifische PO/MO-Dateien werden nicht mehr mitgeliefert; Übersetzungen kommen über translate.wordpress.org.

= 1.6.4 =
* Geändert: Das Plugin heißt jetzt Booker Privacy Spam Guard; WordPress.org-Slug, Text-Domain und Paketnamen wurden auf `booker-privacy-spam-guard` vereinheitlicht.
* Kompatibilität: Vorhandene Einstellungen, Statistiken, Datenbanktabellen, Filter und PHP-Erweiterungspunkte bleiben bei der Umbenennung unverändert erhalten.

= 1.6.3 =
* Behoben: Signierte Integritätstoken für öffentliche Formulare sind nicht mehr an die WordPress-Anmeldesitzung gebunden, sodass Formulare auch für eingeloggte Besucher korrekt funktionieren.
* Behoben: Das Integritätstoken wird vor jedem Sendeversuch erneuert, ohne dabei die Mindestzeitprüfung zurückzusetzen.

= 1.6.2 =
* Behoben: Jeder Übermittlungsversuch erhält einen frischen einmaligen Proof. Ein erneuter Versuch nach einem Elementor-Feld- oder Aktionsfehler löst daher nicht mehr den Replay-Schutz aus.
* Behoben: Technische Challenge-, Timing- und Nonce-Fehler tragen nicht mehr zum Auto-Ban bei; Auto-Ban-Ablehnungen verlängern ihr eigenes Zeitfenster nicht mehr.

= 1.6.1 =
* Behoben: Elementor-Popup-Formulare initialisieren nach dem Klonen der Popup-Vorlage ihren eigenen Proof-of-Work-Zustand und werden nicht mehr mit leerem Arbeitsnachweis abgesendet.

= 1.6.0 =
* Neu: Lokale adaptive SHA-256-Proof-of-Work-Challenge, die in einem Web Worker berechnet wird – ohne Cookies, sichtbares Rätsel oder externen Anbieter.
* Sicherheit: Challenges sind signiert, an Formular und täglichen Fingerprint gebunden, kurzlebig und gegen Wiederverwendung geschützt.
* Adaptiver Schutz: Kürzlich blockierte Versuche erhöhen den Rechenaufwand; die Schutzstufen Basis und Streng passen den Ausgangswert automatisch an.
* Integration: Klassische Elementor-Formulare, Atomic Forms und native WordPress-Kommentare werden unterstützt, ohne Proof-Felder in übermittelte Formularinhalte aufzunehmen.
* Neue Einstellungen für Challenge-Modus und Basis-Schwierigkeit sowie automatische Erneuerung bei länger geöffneten Formularen.
* Datenschutzhinweis und deutsche Übersetzungen für die lokale Berechnung aktualisiert.

= 1.5.1 =
* Behoben: Die globale Standard-Schutzstufe gilt jetzt auch für neue und ältere klassische Elementor-Formulare ohne expliziten Formularwert.
* Behoben: Mehrere Atomic Forms auf derselben Seite verwenden jetzt ihre jeweilige Elementor-Formular-ID für Rate-Limiting und Statistik.
* Behoben: Inhaltsprüfungen funktionieren auch auf Hosts ohne die optionale PHP-Erweiterung mbstring.
* Behoben: Auto-Ban wertet die täglichen Fingerprints jetzt über UTC-Tagesgrenzen hinweg für das vollständige konfigurierte rollierende Zeitfenster aus.
* Datenschutz: Dokumentation und Datenschutzerklärungs-Vorschlag bezeichnen den Fingerprint nun korrekt als pseudonymes Datum.
* Dokumentation: Öffentliche Nonces und Zeit-Token werden klar als Anti-Automatisierungs-Schichten und nicht als geheime CAPTCHA-Alternative beschrieben.

= 1.5.0 =
* Neu: Integrierte Spam-Wortliste, die zusätzlich zu den eigenen Schlüsselwörtern geprüft wird. Der Abgleich erfolgt wortgenau (damit „loan" nicht in „download" anschlägt), die Liste ist über `bookprsp_default_spam_keywords` filterbar und lässt sich in den Einstellungen abschalten.
* Neu: Der Honeypot-Feldname rotiert jetzt regelmäßig (standardmäßig wöchentlich, filterbar über `bookprsp_honeypot_rotation`), damit ein Bot ihn sich nicht dauerhaft merken kann. Der vorherige Name bleibt zur Erkennung gültig, sodass aus dem Cache ausgelieferte Seiten weiterhin funktionieren.

= 1.4.0 =
* Neu: Absendungen ohne Seiten-URL werden blockiert. Elementors eigenes Formular-Skript sendet die Seiten-URL immer mit; fehlt sie, stammt die Absendung nicht von einer gerenderten Seite – ein zuverlässiges Bot-Indiz (direkter POST an admin-ajax.php).
* Neu: URL-Kürzer (bit.ly, tinyurl.com, cutt.ly, …) werden als Spam-Signal erkannt. Die Liste ist über `bookprsp_link_shorteners` filterbar; Hosts werden exakt verglichen, sodass unbeteiligte Domains nicht fälschlich anschlagen.
* Geändert: Die Link-Schwelle auf Schutzstufe Standard liegt jetzt bei 2 (vorher 3).
* Sicherheit: Die Fallback-Gültigkeit des Zeit-Tokens beträgt jetzt 2 Stunden (vorher 24). Echte Besucher erhalten ohnehin ein frisch erzeugtes Token über den nicht gecachten Endpunkt – das verkleinert vor allem das Zeitfenster, in dem ein von einer gecachten Seite abgegriffenes Token wiederverwendet werden könnte.

= 1.3.0 =
* Neu: Cache-/CDN-Kompatibilität. Zeit-Token und Nonce werden jetzt beim Seitenaufbau aus einem nicht gecachten REST-Endpunkt frisch nachgeladen, sodass Full-Page- oder Edge-Caches (z. B. Cloudflare) Besuchern kein eingefrorenes, abgelaufenes Token mehr ausliefern. Fällt bei deaktiviertem JavaScript sauber auf das servergerenderte Token zurück.
* Verbessert: Die maximale Gültigkeit des Zeit-Tokens ist jetzt großzügig und filterbar (`bookprsp_timing_max_seconds`), um echte Besucher auf lange gecachten Seiten nicht fälschlich zu blockieren.

= 1.2.1 =
* Neu: Info-/Willkommensbereich auf der Statistik-Seite, der Funktion und Nutzen des Plugins auf einen Blick erklärt.

= 1.2.0 =
* Neu: Konfigurierbare Client-IP-Ermittlung für Seiten hinter Reverse-Proxy, Load-Balancer oder CDN (z. B. Cloudflare) – inklusive Trusted-Proxy-Liste (IP/CIDR) als Schutz vor gefälschten Headern.
* Neu: Automatischer Datenbank-Upgrade-Pfad, der das Schema bei Plugin-Updates auf dem aktuellen Stand hält.
* Menüstruktur: Alle Ansichten jetzt gebündelt unter „Booker Tools → Privacy Spam Guard" mit Tabs für Statistik und Einstellungen.

= 1.1.0 =
* Neu: Content-Heuristik (zu viele Links, eigene Spam-Schlüsselwörter) als zusätzliches Kriterium.
* Neu: Automatische Sperre für wiederholt blockierte Fingerprints (Schwelle/Zeitfenster einstellbar).
* Neu: Verlaufs-Diagramm der letzten 14 Tage auf der Statistik-Seite.
* Neu: Fertiger Textbaustein für die Datenschutzerklärung, inklusive Anbindung an den WordPress-Datenschutz-Assistenten.

= 1.0.0 =
* Erste Veröffentlichung: Honeypot, Zeitprüfung, Nonce-Prüfung, Rate-Limiting, Schutzstufen je Formular, Statistik-Seite.
