ALTCHA Spam-Schutz
ALTCHA Proof-of-Work-Spamschutz für Sylius-Formulare und die Shop-API - kanalweise konfigurierbare Schutzziele, Honeypot, Rate-Limiting, Wegwerf-E-Mail- und Gibberish-Prüfung
ALTCHA Spam-Schutz
Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.
Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net
Überblick
Datenschutzfreundlicher Spam-Schutz für Sylius-Storefront-Formulare und die Shop API auf Basis von ALTCHA Proof-of-Work. Keine Cookies, kein Fingerprinting, keine Anfragen an Dritte: Der Browser löst die kleine Rechenaufgabe automatisch beim Absenden, ohne Eingabe des Besuchers, statt dass Besucher Kacheln anklicken oder verzerrten Text entziffern müssen.
Welche Formulare geschützt werden, legst du im Admin pro Channel fest, nicht global.
Datenschutz: Jede Prüfung läuft auf deinem eigenen Server. Es werden keine Daten an externe Dienste gesendet und weder Cookies noch Fingerprints gesetzt.
Eingebaute Schutzziele sind Registrierung, Kontaktformular, Login, "Passwort vergessen" und der Login im Checkout (dort nur mit Rate-Limit). Das Support-Formular (mmd/sylius-support-form-plugin) und die Newsletter-Anmeldung (mmd/sylius-newsletter-management-plugin) werden automatisch erkannt, sobald diese Plugins installiert sind, und erscheinen in derselben Liste. Jedes andere Formular, egal ob aus einem fremden Plugin oder aus eigenem Code, kannst du im Admin als zusätzliches Schutzziel hinzufügen.
graph LR
A["Storefront (Twig-Hook)"] --> C["ALTCHA-Prüfkette"]
B["Shop API (Header X-Altcha-Payload)"] --> C
C --> D["Channel-Einstellungen"]
D --> E{"Ergebnis"}
E -->|"akzeptiert"| F["Formular / API-Anfrage wird verarbeitet"]
E -->|"abgelehnt"| G["Formularfehler / HTTP 422"]
Dokumentation
| Seite | Inhalt |
|---|---|
| Installation und Betrieb | Installation, Update, Cronjobs, Deinstallation |
| Konfiguration | Einstellungen pro Channel, Admin-Grids, Praxis-Beispiele |
| Inhaltsprüfungen | Wegwerf-E-Mail- und Gibberish-Prüfung im Detail: Geltungsbereich, Abgleich, Bewertung, Einführung |
| Storefront-Integration | Widget einbauen, Twig-Funktion und Hooks, Theme-Hinweise |
| Shop API / Headless | Challenge-Endpunkt, Anfragen, Fehlerformat |
| Erweiterbarkeit und Kompatibilität | Eigene Schutzziele, Service-Tags, Abwärtskompatibilität |
| Fehlerbehebung und FAQ | Typische Probleme, bekannte Einschränkungen, häufige Fragen |
| Technische Details | Ablauf der Prüfungen, Plugin-Struktur, Entities |
Features
| Feature | Beschreibung |
|---|---|
| Proof-of-Work-Challenge | PBKDF2-Aufgabe, die der Browser automatisch beim Absenden löst, ohne Eingabe des Besuchers; signiert mit einem eigenen HMAC-Secret pro Channel |
| Einmalig verwendbare Lösungen | Eine gelöste Challenge wird genau einmal akzeptiert (Replay-Schutz) |
| Rate-Limiting | Pro Formular und Client-Adresse, geprüft bevor eine Challenge verbraucht wird |
| Honeypot-Feld | Unsichtbares Feld, das nur Bots ausfüllen |
| Mindest-Ausfüllzeit | Ein signierter Zeitstempel lehnt Absendungen ab, die schneller eintreffen, als ein Mensch tippen kann |
| Wegwerf-E-Mail-Prüfung | Optional: lehnt Adressen bekannter Wegwerf-Anbieter ab; Ausnahmen und Ergänzungen pflegst du selbst |
| Gibberish-Prüfung | Optional: bewertet Freitextfelder und lehnt zufällige Tastenfolgen und Unsinnstext ab |
| Dual-Mode | Funktioniert im Twig-Storefront und headless über die Shop API auf dieselbe Weise |
| Konfiguration pro Channel | Alle Einstellungen (Schutzziele, Schwierigkeit, Rate-Limit, Inhaltsprüfungen) gelten für genau einen Channel |
Anforderungen
| Anforderung | Version | Hinweise |
|---|---|---|
| Sylius | ^2.2 | Entwickelt gegen 2.3; die CI führt die komplette Testsuite auf Sylius 2.2 und 2.3 aus |
| PHP | ^8.3 | Mit der Extension sodium |
| Symfony | ^7.4 | Symfony 8 wird von Sylius 2.x nicht unterstützt und ist deshalb ausgeschlossen |
| Datenbank | MySQL 8 oder MariaDB | PostgreSQL wird nicht unterstützt. Die Migrationen sind in MySQL-Syntax geschrieben und brechen auf anderen Datenbanken bewusst ab. Installiere das Plugin deshalb nicht in einem Projekt auf PostgreSQL, denn der Abbruch würde auch alle folgenden Migrationen deines Projekts blockieren. Getestet wird gegen MySQL 8.4, MariaDB ist nicht verifiziert (auf DBAL 3 braucht die Spalte target_overrides JSON dort eventuell zusätzlich einen (DC2Type:json)-Kommentar). |
APP_SECRET |
nicht leer | Die Channel-Secrets werden mit einem daraus abgeleiteten Schlüssel verschlüsselt; alle Anwendungsserver müssen denselben Wert verwenden |
doctrine/dbal |
^3.9 oder ^4.0 | Sylius 2.2 verlangt DBAL 3, Sylius 2.3 erlaubt 4; beide laufen durch die komplette Testsuite. Auf DBAL 3 tragen die drei DATETIME-Spalten einen (DC2Type:datetime_immutable)-Kommentar. Beim Wechsel auf DBAL 4 (Sylius 2.2 auf 2.3) listet der nächste Schema-Diff deines Hosts diese drei Spalten einmalig auf, wie bei den Sylius-Core-Tabellen; die generierte Migration beseitigt das. |
altcha-org/altcha |
~2.1.0 | Fest gepinnt, weil das mitgelieferte Widget-Script und diese Library dasselbe Protokoll sprechen |
Lizenz
Kommerzielle Lizenz: Eine Lizenz gilt für eine Sylius-Installation (alle Channels sowie deren Entwicklungs- und Staging-Umgebungen). Eine Weitergabe ist nicht erlaubt, Updates sind 12 Monate ab Kauf enthalten. Die mitgelieferten ALTCHA-Widget-Scripts und die Wegwerf-Domain-Liste behalten ihre eigenen Lizenzen (MIT bzw. CC0).
Support
Bei Fragen zur Lizenz, technischen Fragen oder Fehlern erreichst du mich unter support@markus-michalski.net.