Datenschutzfreundlicher Spam-Schutz für OXID eShop 7.x Kontakt-, Newsletter- und Registrierungsformulare mit ALTCHA Proof-of-Work, Honeypot-Feldern, Inhaltsvalidierung (Gibberish-Erkennung und Wegwerf-E-Mail-Blockierung) und IP-basiertem Rate Limiting.
Live Demo: Teste alle Plugins für OXID eShop und Shopware von Markus Michalski live — ohne Installation, ohne Risiko. demo.markus-michalski.net
ALTCHA ist eine selbst gehostete, datenschutzfreundliche CAPTCHA-Alternative. Anders als Google reCAPTCHA oder hCaptcha:
Statt Bilderrätseln nutzt ALTCHA Proof-of-Work - der Browser des Nutzers muss eine kleine Rechenaufgabe lösen (SHA-256 Hashing). Das dauert etwa 1-2 Sekunden und passiert automatisch im Hintergrund. Bots bräuchten erhebliche Rechenleistung, um dies im großen Stil zu umgehen.
/kontakt/)/newsletter/)/konto-eroeffnen/)Fügen Sie das private Composer-Repository zur composer.json Ihres Shops hinzu:
{
"repositories": [
{
"type": "composer",
"url": "https://packeton.markus-michalski.net"
}
]
}
Hinweis: Die Zugangsdaten zum Repository werden nach Erwerb einer Lizenz zugestellt. Die Verwaltung der privaten Repositories läuft über Packeton.
composer require mmd/oxid7-altcha-integration
Bei der Authentifizierungsabfrage geben Sie die Zugangsdaten ein, die Sie mit Ihrer Lizenz erhalten haben.
vendor/bin/oe-console oe:module:activate mmd_altcha
vendor/bin/oe-console oe:cache:clear
Hinweis: Bei Installation via Composer registriert OXID das Modul automatisch aus
vendor/. Der Befehloe:module:installwird nur für Module insource/modules/benötigt.
Auf die neueste Version aktualisieren:
composer update mmd/oxid7-altcha-integration
vendor/bin/oe-console oe:cache:clear
Modul-Konfiguration im OXID Admin unter:
Erweiterungen > Module > ALTCHA Spam-Schutz > Einstell.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Modul aktivieren | An | Hauptschalter für alle Schutzfunktionen |
| Einstellung | Standard | Beschreibung |
|---|---|---|
| ALTCHA aktivieren | An | Zeigt "Ich bin kein Roboter"-Checkbox, die sich automatisch verifiziert |
| Max Number (Schwierigkeit) | 50000 | Höher = schwierigere Challenge, mehr CPU-Zeit erforderlich |
| Gültigkeit (Sekunden) | 300 | Wie lange eine Challenge gültig ist (Standard 5 Minuten) |
| HMAC Secret | (auto) | Wird automatisch generiert wenn leer. Geheimer Schlüssel für Signierung |
Zur Challenge-Schwierigkeit:
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Honeypot aktivieren | An | Fügt unsichtbares Fallenfeld hinzu, das Bots fängt |
| Feldname | website | Name des Honeypot-Eingabefelds |
Das Honeypot ist ein verstecktes Formularfeld, das echte Nutzer nie sehen oder ausfüllen. Bots, die automatisch alle Formularfelder ausfüllen, lösen diese Falle aus.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Inhaltsvalidierung aktivieren | An | Prüft Formularinhalte auf Gibberish-Muster und blockiert Wegwerf-E-Mail-Adressen |
Die Inhaltsvalidierung arbeitet rein serverseitig und benötigt keine zusätzlichen Frontend-Änderungen. Sie ist standardmäßig aktiviert und schützt alle Formulare automatisch.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Rate Limiting aktivieren | An | Begrenzt Formular-Übermittlungen pro IP-Adresse |
| Max. Anfragen | 5 | Maximale Übermittlungen pro Zeitfenster |
| Zeitfenster (Minuten) | 60 | Rate-Limit-Fenster (Standard 1 Stunde) |
Hinweis: IP-Adressen werden als HMAC-SHA256-Hashes in der Datenbank gespeichert zur DSGVO-Konformität. Die Original-IP kann aus dem Hash nicht rekonstruiert werden.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Challenge Rate Limit aktivieren | An | Schützt Challenge-Endpunkt vor DoS-Angriffen |
| Max. Challenges | 30 | Maximale Challenges pro IP pro Zeitfenster |
| Zeitfenster (Minuten) | 60 | Rate-Limit-Fenster für Challenges |
Die Inhaltsvalidierung ist ein mehrstufiges Erkennungssystem, das Formularinhalte auf Spam-Muster analysiert. Es besteht aus zwei Hauptkomponenten: Gibberish-Erkennung und Wegwerf-E-Mail-Erkennung.
Die Gibberish-Erkennung analysiert Texteingaben in folgenden Formularfeldern:
Sechs verschiedene Analysemethoden werden kombiniert:
| Methode | Beschreibung | Schwellenwert |
|---|---|---|
| Konsonanten-Verhältnis | Zu hoher Konsonanten-Anteil deutet auf zufällige Eingaben hin | > 75% (> 90% bei Wörtern bis 7 Zeichen) |
| Tastatur-Sequenzen | Erkennt Keyboard-Mashing wie "asdfgh", "qwerty", "zxcvbn" | 4-6 Zeichen lange Sequenzen |
| Wiederholende Zeichen | Identische Zeichen in Folge (z.B. "aaaa") | 3+ identische Zeichen |
| Aufeinanderfolgende Konsonanten | Unnatürlich viele Konsonanten ohne Vokal | 6+ Konsonanten in Folge |
| Konsonanten-Cluster | Mehrere Gruppen von dichten Konsonanten in einem Wort | 2+ Cluster mit je 4+ Konsonanten |
| Bigram-Frequenzanalyse | Prüft ob Buchstabenpaare in natürlichen Sprachen vorkommen | Min. 30% bekannte Bigrams (164 Referenz-Paare) |
Die Erkennung nutzt einen 2-Feld-Schwellenwert: Mindestens 2 Formularfelder müssen als verdächtig erkannt werden, bevor eine Eingabe als Spam gilt. Das minimiert False Positives bei ungewöhnlichen aber legitimen Namen.
Deutsche Namen mit hohem Konsonanten-Anteil (Schmidt, Schwartz, Fritz) sowie internationale Namen (polnisch, türkisch, französisch) werden korrekt als legitim erkannt. Die Analyse berücksichtigt Umlaute (ä, ö, ü) als Vokale und kennt 164 häufige Bigrams aus mehreren Sprachen.
Blockiert Registrierungen und Kontaktanfragen mit Disposable-E-Mail-Adressen. Die integrierte Blockliste umfasst 63 bekannte Anbieter, darunter:
Die Blockliste wird statisch im Modul gepflegt und mit Updates erweitert. Eigene Domains können derzeit nicht über das Admin-Panel hinzugefügt werden.
Das Modul validiert Übermittlungen in dieser Reihenfolge (optimiert für Performance - günstigste Prüfung zuerst):
Eine Übermittlung muss ALLE aktivierten Prüfungen bestehen, um akzeptiert zu werden.
Das Modul erstellt zwei Datenbank-Tabellen:
Speichert Rate-Limiting-Daten:
ip_hash - HMAC-SHA256-Hash der IP-Adresseaction - Aktions-Identifier (z.B. "contact_form", "newsletter", "challenge")request_count - Anzahl der Anfragen im aktuellen Zeitfensterwindow_start - Start des aktuellen Rate-Limit-FenstersSpeichert verwendete ALTCHA-Challenges zur Verhinderung von Replay-Angriffen:
challenge_hash - Hash der verwendeten Challengeused_at - Wann die Challenge verwendet wurdeexpires_at - Wann dieser Eintrag gelöscht werden soll (automatische Bereinigung)Liefert eine neue ALTCHA-Challenge für das Widget:
{
"algorithm": "SHA-256",
"challenge": "abc123...",
"maxnumber": 50000,
"salt": "xyz789...",
"signature": "sig..."
}
Dieser Endpunkt wird automatisch vom ALTCHA-Widget beim Laden des Formulars aufgerufen.
Das Modul nutzt OXID 7 Template Extensions, um das ALTCHA-Widget und Honeypot-Felder in Formulare einzufügen. Templates befinden sich in:
views/twig/extensions/themes/apex/
├── form/
│ ├── contact.html.twig # Kontaktformular-Integration
│ └── newsletter.html.twig # Newsletter-Formular-Integration
└── layout/
└── base.html.twig # JavaScript/CSS-Einbindung
Für das Registrierungsformular wird die Schutzlogik über eine PHP-Extension (UserComponent) eingebunden, die den createUser()-Prozess abfängt. Hier ist keine Template-Änderung nötig.
Für eigene Template-Integrationen stehen diese Methoden auf oViewConf zur Verfügung:
{# Prüfen ob Features aktiviert sind #}
{% if oViewConf.getAltchaEnabled() %}
{# ALTCHA ist aktiv #}
{% endif %}
{% if oViewConf.getHoneypotEnabled() %}
{# Honeypot ist aktiv #}
{% endif %}
{# Konfigurationswerte abrufen #}
{{ oViewConf.getChallengeUrl() }} {# Challenge-Endpunkt-URL #}
{{ oViewConf.getHoneypotFieldName() }} {# Honeypot-Feldname #}
{{ oViewConf.getAltchaStrings() }} {# Lokalisierte Widget-Strings #}
Dieses Modul wurde mit Datenschutz im Fokus entwickelt:
| Aspekt | Umsetzung |
|---|---|
| Externe Dienste | Keine - vollständig selbst gehostet |
| Cookies | Keine |
| Nutzer-Tracking | Keins |
| IP-Speicherung | Nur HMAC-SHA256 gehasht |
| Datenspeicherung | Automatische Bereinigung abgelaufener Einträge |
| Einwilligung erforderlich | Nein - keine Verarbeitung personenbezogener Daten |
Wichtig: Da keine Cookies gesetzt werden und keine Daten an Dritte gesendet werden, müssen Sie dieses Modul NICHT zu Ihrem Cookie-Consent-Banner hinzufügen.
| Feature | ALTCHA (dieses Modul) | Google reCAPTCHA | hCaptcha |
|---|---|---|---|
| Selbst gehostet | Ja | Nein | Nein |
| DSGVO ohne Einwilligung | Ja | Nein | Nein |
| Keine Cookies | Ja | Nein | Nein |
| Keine externen Anfragen | Ja | Nein | Nein |
| Nutzererlebnis | Auto-Verifizierung | Bilderrätsel | Bilderrätsel |
| Barrierefreiheit | WCAG 2.2 AA | Eingeschränkt | Eingeschränkt |
| Inhaltsvalidierung | Ja (Gibberish + E-Mail) | Nein | Nein |
| Serverlast | Minimal | Extern | Extern |
vendor/bin/oe-console oe:cache:clearvendor/bin/oe-console oe:module:listsource/log/ auf detaillierte Fehlermeldungen prüfen"Max. Anfragen" oder "Zeitfenster" in der Modul-Konfiguration erhöhen.
Das Honeypot basiert darauf, dass Bots versteckte Felder ausfüllen. Ausgeklügelte Bots könnten versteckte Felder überspringen. Verwenden Sie ALTCHA als primären Schutz.
Die Inhaltsvalidierung nutzt einen 2-Feld-Schwellenwert - ein einzelner ungewöhnlicher Name löst keinen Alarm aus. Falls dennoch False Positives auftreten:
Die Fehlermeldung für den Nutzer lautet allgemein "Ihre Eingaben konnten nicht verarbeitet werden. Bitte überprüfen Sie Ihre Angaben." - es werden keine Details zu den erkannten Spam-Mustern angezeigt, um Angreifern keine Hinweise zu geben.
Die Blockliste umfasst 63 bekannte Disposable-E-Mail-Anbieter. Neue Anbieter werden mit Modul-Updates ergänzt. Falls ein bestimmter Anbieter fehlt, kontaktieren Sie den Support.
vendor/bin/oe-console oe:module:deactivate mmd_altcha
rm -rf var/cache/* source/tmp/*
vendor/bin/oe-console oe:module:activate mmd_altcha
Kommerzielle Lizenz - Einzelinstallations-Lizenz:
Entwicklungs- und Staging-Umgebungen inklusive. 12 Monate kostenlose Updates.
Siehe LICENSE-Datei für vollständige Bedingungen.
Bei Fragen und Support:
Markus Michalski
E-Mail: support@markus-michalski.net