Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| jtl-shop:altcha-spamschutz:start [2026/09/21 16:13] – Anonymisierung + reCAPTCHA/Cloudflare-Hinweis ergaenzt jf | jtl-shop:altcha-spamschutz:start [2026/09/22 09:43] (aktuell) – Revert auf vorherige Fassung (letzte Ergänzung zurückgenommen) jf | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== JTL-Shop: falk_plus ALTCHA Spam- und Botschutz ====== | ||
| - | ====== | + | Selbst gehostetes, quelloffenes Spam- und Botschutz-Plugin für JTL-Shop |
| - | Selbst gehostetes, quelloffenes Spamschutz-Plugin | + | ===== 1. Was macht das Plugin |
| - | Der Plugin-Quellcode wird direkt aus unserem Gitea-Repository synchronisiert | + | Das Plugin |
| - | ===== 1. Hintergrund ===== | + | Da die gesamte Prüfung selbst gehostet läuft, verlassen keine Besucherdaten den eigenen Server, es gibt keine Weiterleitung an Google oder Cloudflare und keine Cookie- oder Datenschutz-Implikationen durch Drittanbieter-Dienste. |
| - | Anlass war ein Bot-Problem bei einem Kunden: Über Wochen liefen massenhaft Fake-Registrierungen und Newsletter-Anmeldungen mit immer demselben Muster auf – " | + | ===== 2. Hintergrund ===== |
| - | ===== 2. Funktionsweise ===== | + | Anlass war ein Bot-Problem: |
| - | Registrierung | + | Dieses Plugin prüft stattdessen direkt beim Absenden von Registrierung, Newsletter-Anmeldung |
| - | Kann ergänzend zu einem bestehenden Rate-Limit eingesetzt werden oder andere Spamschutz-Plugins vollständig ersetzen. | + | ===== 3. Funktionsweise (ALTCHA) ===== |
| - | ===== 3. Installation ===== | + | [[https:// |
| - | - Im Adminbereich unter *Plugins → Plugin-Verwaltung* prüfen, ob eine " | + | - Der Server erzeugt beim Laden der Seite eine zufällige Rechenaufgabe (Challenge) |
| - | - Falls nicht: ZIP entpacken, Ordner '' | + | - Der Browser des Besuchers löst diese Aufgabe im Hintergrund per JavaScript, bevor das Formular abgeschickt werden kann. |
| - | - Plugin öffnen → Einstellungen → Feld **HMAC-Geheimschlüssel** mit einem zufälligen, | + | - Beim Absenden prüft der Server die eingereichte Lösung anhand der Signatur. Passt sie nicht oder fehlt sie, wird die Anfrage abgelehnt. |
| - | - Übrige Einstellungen können auf den Standardwerten bleiben (Sicherheitsstufe " | + | |
| - | - Speichern. | + | |
| - | ===== 4. Einstellungen ===== | + | Die Bibliothek und das Verfahren stehen unter der MIT-Lizenz und werden unverändert vom offiziellen Projekt übernommen (siehe [[https:// |
| - | ^ Einstellung ^ Bedeutung ^ | + | ===== 4. Geschützte |
| - | | HMAC-Geheimschlüssel | Signiert die Sicherheitsprüfung. Pro Shop-Installation einmalig erzeugen, danach nicht mehr ändern. | | + | |
| - | | Sicherheitsstufe (Rechenaufwand) | Niedrig/ | + | |
| - | | Gültigkeit der Prüfung | Wie lange eine erzeugte Prüfung gültig bleibt (Standard 600 Sekunden). | | + | |
| - | | Kundenregistrierung / Newsletter-Anmeldung schützen | Formulare | + | |
| - | | Debug-Logging | Schreibt Diagnoseinformationen ins Shop-Errorlog, | + | |
| - | ===== 5. Pflicht-Test vor Produktivbetrieb ===== | + | * Kundenregistrierung (''/ |
| + | * Newsletter-Anmeldung (''/ | ||
| + | * Kontaktformular (''/ | ||
| - | Dieses Plugin greift aktiv in Registrierung und Newsletter-Anmeldung ein. Die Kern-Sicherheitsprüfung (Challenge erzeugen → lösen → verifizieren) wurde isoliert erfolgreich getestet, die Einbindung in JTL-Shop selbst basiert mangels Zugriff auf den JTL-Shop-Quellcode auf der offiziellen Hook-Dokumentation und echtem, öffentlichem Code vergleichbarer, | + | Jedes der drei Formulare lässt sich in den Plugin-Einstellungen einzeln aktivieren oder deaktivieren. |
| - | - **Normale Registrierung: | + | ===== 5. Installation |
| - | - **Normale Newsletter-Anmeldung: | + | |
| - | - **Bypass-Versuch (wichtigster Test):** In der Entwicklerkonsole '' | + | |
| - | - **Direkter POST ohne JavaScript** (z. B. curl/Postman) ohne gültiges '' | + | |
| - | - Einige Tage laufen lassen und die echten Fake-Registrierungszahlen beobachten, bevor produktiv übernommen wird. | + | |
| - | - Danach kurz Debug-Logging aktivieren, ein paar Testanmeldungen durchführen, | + | |
| - | ===== 6. Technischer Hintergrund ===== | + | Das Plugin wird als ZIP-Datei über das JTL-Shop-Backend installiert (*Plugins → Plugin hochladen*). |
| - | ==== 6.1 Warum ALTCHA V1 statt des aktuellen Widgets (v3)? ==== | + | Nach dem Hochladen wird das Plugin wie gewohnt im JTL-Shop-Backend aktiviert. Ein HMAC-Geheimschlüssel muss nicht manuell hinterlegt werden, das Plugin erzeugt beim ersten Aufruf automatisch einen zufälligen Schlüssel und speichert ihn im Plugin-Verzeichnis. |
| - | Das offizielle ALTCHA-JS-Widget v3 nutzt ein neueres, komplexeres Protokoll (PBKDF2/ | + | Repository: [[https://vw.falk.plus/JensFalk/JTL-Shop-ALTCHA-Spamschutz|vw.falk.plus/ |
| - | Die Kryptografie wurde Cross-Language getestet: Der echte, unveränderte '' | + | ===== 6. Einstellungen ===== |
| - | ==== 6.2 Verwendete | + | In den Plugin-Einstellungen im JTL-Shop-Backend lassen sich konfigurieren: |
| - | ^ Hook ^ Zweck ^ | + | * **HMAC-Geheimschlüssel** |
| - | | HOOK_SMARTY_OUTPUTFILTER | Fügt Widget-Container und Skript in das gerenderte HTML von Registrierungs- und Newsletter-Formular ein (phpQuery-DOM-Filter). | | + | * **Sicherheitsstufe |
| - | | HOOK_REGISTRIEREN_PAGE_REGISTRIEREN_PLAUSI | Plausibilitätsprüfung nach Absenden des Registrierungsformulars. | | + | * **Gültigkeit der Prüfung** -- wie lange eine erzeugte Prüfung gültig bleibt, bevor sie abläuft. |
| - | | HOOK_NEWSLETTER_PAGE_EMPFAENGEREINTRAGEN | Zusätzliche Absicherung kurz vor dem Speichern des Newsletter-Empfängers (defense in depth). | | + | * **Formulare** -- Registrierung, |
| + | * **Debug-Logging** -- schreibt zusätzliche Diagnoseinformationen ins Error-Log. | ||
| - | Registriert per EventDispatcher in '' | + | ===== 7. Test nach der Installation ===== |
| - | ==== 6.3 Defensives Design (fail-open) ==== | + | Nach der Installation sollte einmal geprüft werden, dass: |
| - | Jede Stelle, an der sich das Plugin | + | * in Registrierung, Newsletter-Anmeldung und Kontaktformular die Sicherheitsprüfung sichtbar erscheint und nach kurzer Zeit " |
| + | * eine normale, korrekt ausgefüllte Anfrage | ||
| + | * ein Absenden ohne JavaScript bzw. ohne gelöste | ||
| - | ===== 7. Bekannte | + | ===== 8. Bekannte |
| - | Falls das Registrierungs- oder Newsletterformular im verwendeten Template abweichende CSS-Klassen/ | + | Das Widget wird über das umgebende Formular-Element eingebunden. Bei stark individualisierten Theme-Anpassungen, die die Formularstruktur wesentlich verändern, kann es in seltenen Fällen nötig sein, die verwendeten CSS-Selektoren |
| - | ==== 8. Fehlerbehebung | + | ===== 9. Weiterführende Links ===== |
| - | ^ Problem ^ Ursache ^ Lösung ^ | + | * Gitea-Repository (Quellcode, |
| - | | Widget erscheint nicht | Formular-Selektoren passen nicht zum Template | Siehe Abschnitt 7, Issue öffnen | | + | |
| - | | Registrierung/ | + | |
| - | | Keine Fehlermeldung, | + | |
| - | + | ||
| - | ===== 9. Quellcode | + | |
| - | + | ||
| - | Wird als reguläre Plugin-Dateien im Shop-Plugin-Verzeichnis abgelegt (siehe Installation). Die vendorierte ALTCHA-PHP-Bibliothek ('' | + | |
| - | + | ||
| - | ==== 9.1 info.xml (Plugin-Manifest & Einstellungen) ==== | + | |
| - | + | ||
| - | {{page> | + | |
| - | + | ||
| - | === 💬 Fragen & Feedback === | + | |
| - | Haben Sie Fehler gefunden, Verbesserungsvorschläge oder Fragen zu dieser Datei? | + | |
| - | [[https:// | + | |
| - | + | ||
| - | ==== 9.2 Bootstrap.php (Hook-Registrierung) ==== | + | |
| - | + | ||
| - | {{page> | + | |
| - | + | ||
| - | === 💬 Fragen & Feedback === | + | |
| - | Haben Sie Fehler gefunden, Verbesserungsvorschläge oder Fragen zu dieser Datei? | + | |
| - | [[https://vw.falk.plus/ | + | |
| - | + | ||
| - | ==== 9.3 AltchaService.php (Challenge & Verifikation) ==== | + | |
| - | + | ||
| - | {{page> | + | |
| - | + | ||
| - | === 💬 Fragen & Feedback === | + | |
| - | Haben Sie Fehler gefunden, Verbesserungsvorschläge oder Fragen zu dieser Datei? | + | |
| - | [[https:// | + | |
| - | + | ||
| - | ==== 9.4 TemplateHandler.php | + | |
| - | + | ||
| - | {{page> | + | |
| - | + | ||
| - | === 💬 Fragen & Feedback === | + | |
| - | Haben Sie Fehler gefunden, Verbesserungsvorschläge oder Fragen zu dieser Datei? | + | |
| - | [[https://vw.falk.plus/JensFalk/ | + | |
| - | + | ||
| - | ==== 9.5 ValidationHandler.php (Prüfung bei Absenden) ==== | + | |
| - | + | ||
| - | {{page> | + | |
| - | + | ||
| - | === 💬 Fragen & Feedback === | + | |
| - | Haben Sie Fehler gefunden, Verbesserungsvorschläge oder Fragen zu dieser Datei? | + | |
| - | [[https:// | + | |
| - | + | ||
| - | ==== 9.6 fp-altcha.js (Client-seitiger Löser) ==== | + | |
| - | + | ||
| - | {{page> | + | |
| - | + | ||
| - | === 💬 Fragen & Feedback === | + | |
| - | Haben Sie Fehler gefunden, Verbesserungsvorschläge oder Fragen zu dieser Datei? | + | |
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | //Anleitung erstellt auf Basis einer echten Kundenumsetzung. Plugin-Quellcode wird live aus Gitea (Repo: JTL-Shop-ALTCHA-Spamschutz) synchronisiert// | + | |