Datenschutzfreundlicher Spam-Schutz für OXID eShop 7.x Kontakt- und Newsletter-Formulare mit ALTCHA Proof-of-Work, Honeypot-Feldern und IP-basiertem Rate Limiting.
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/)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
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 |
|---|---|---|
| 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 |
Das Modul validiert Übermittlungen in dieser Reihenfolge (optimiert für Performance):
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 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 |
| 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.
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