Datenschutzfreundlicher Spam-Schutz für Shopware 6 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.
Die Installation über den Shopware Store wird empfohlen. Nach dem Kauf können Sie das Plugin direkt über das Backend installieren.
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/altcha-integration
Bei der Authentifizierungsabfrage geben Sie die Zugangsdaten ein, die Sie mit Ihrer Lizenz erhalten haben.
bin/console plugin:refresh
bin/console plugin:install --activate MmdAltchaIntegration
bin/console cache:clear
Auf die neueste Version aktualisieren:
composer update mmd/altcha-integration
bin/console cache:clear
Plugin-Konfiguration im Shopware Admin unter:
Einstellungen > Erweiterungen > ALTCHA Spam-Schutz
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Spam-Schutz aktivieren | An | Hauptschalter für alle Schutzfunktionen |
| Newsletter-Formular schützen | An | Aktiviert Spam-Schutz für Newsletter-Anmeldeformulare |
| Einstellung | Standard | Beschreibung |
|---|---|---|
| ALTCHA-Widget aktivieren | An | Zeigt "Ich bin kein Roboter"-Checkbox, die sich automatisch verifiziert |
| Challenge-Schwierigkeit (Max Number) | 50000 | Höher = schwierigere Challenge, mehr CPU-Zeit erforderlich |
| Challenge-Gültigkeit (Sekunden) | 300 | Wie lange eine Challenge gültig ist (Standard 5 Minuten) |
| HMAC Secret | (leer) | Leer lassen um APP_SECRET zu verwenden. Eigenes Secret für Signierung |
Zur Challenge-Schwierigkeit:
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Honeypot-Feld aktivieren | An | Fügt unsichtbares Fallenfeld hinzu, das Bots fängt |
Das Honeypot ist ein verstecktes Formularfeld namens "website", das echte Nutzer nie sehen oder ausfüllen. Bots, die automatisch alle Formularfelder ausfüllen, lösen diese Falle aus.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| IP-basiertes Rate Limiting aktivieren | An | Begrenzt Formular-Übermittlungen pro IP-Adresse |
| Max. Anfragen | 3 | Maximale Übermittlungen pro Zeitfenster |
| Zeitfenster (Minuten) | 60 | Rate-Limit-Fenster (Standard 1 Stunde) |
| Separate Limits pro Verkaufskanal | Aus | Limits pro Verkaufskanal separat verfolgen |
Hinweis: IP-Adressen werden als SHA-256-Hashes in der Datenbank gespeichert zur DSGVO-Konformität. Die Original-IP kann aus dem Hash nicht rekonstruiert werden.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Challenge Rate Limiting aktivieren | An | Begrenzt Challenge-Anfragen pro IP um DoS-Angriffe zu verhindern |
| Max. Challenges pro IP | 30 | Maximale Challenge-Anfragen pro Zeitfenster |
| Zeitfenster (Minuten) | 60 | Rate-Limit-Fenster (Standard 1 Stunde) |
Dies verhindert, dass Angreifer den /altcha/challenge-Endpunkt mit Anfragen überfluten. Bei Überschreitung des Limits wird eine 429 Too Many Requests-Antwort mit Retry-After-Header zurückgegeben.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Blockierte Spam-Versuche protokollieren | An | Protokolliert blockierte Übermittlungen zur Überwachung |
Das Plugin validiert Übermittlungen in dieser Reihenfolge (optimiert für Performance):
Eine Übermittlung muss ALLE aktivierten Prüfungen bestehen, um akzeptiert zu werden.
Das Plugin erstellt zwei Datenbank-Tabellen:
Speichert Rate-Limiting-Daten:
ip_hash - SHA-256-Hash der IP-Adresseaction - Aktions-Identifier (z.B. "contact_form", "newsletter", "challenge")created_at - Zeitstempel der Anfragesales_channel_id - Optionale Verkaufskanal-ZuordnungSpeichert 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 sollEin Scheduled Task läuft alle 6 Stunden zur Bereinigung von:
Task-Name: mmd_altcha.rate_limit_cleanup
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 der Seite aufgerufen.
Rate Limiting: Dieser Endpunkt ist durch separates Rate Limiting geschützt (Standard: 30 Anfragen/Stunde pro IP) um DoS-Angriffe zu verhindern.
Für eigene Formular-Integrationen:
{# Alle Schutzfelder rendern (ALTCHA + Honeypot) #}
{{ spam_protection_fields(context.salesChannel.id) }}
{# Oder einzeln #}
{% if altcha_enabled(context.salesChannel.id) %}
{{ altcha_widget(context.salesChannel.id) }}
{% endif %}
{% if honeypot_enabled(context.salesChannel.id) %}
{{ honeypot_field(context.salesChannel.id)|raw }}
{% endif %}
{# Prüfen ob Newsletter-Schutz aktiviert ist #}
{% if newsletter_protection_enabled(context.salesChannel.id) %}
{# Schutzfelder nur für Newsletter anzeigen #}
{% endif %}
Dieses Plugin wurde mit Datenschutz im Fokus entwickelt:
| Aspekt | Umsetzung |
|---|---|
| Externe Dienste | Keine - vollständig selbst gehostet |
| Cookies | Keine |
| Nutzer-Tracking | Keins |
| IP-Speicherung | Nur SHA-256 gehasht |
| Datenspeicherung | Automatische Bereinigung via Scheduled Task |
| Einwilligung erforderlich | Nein - keine Verarbeitung personenbezogener Daten |
Wichtig: Da keine Cookies gesetzt werden und keine Daten an Dritte gesendet werden, müssen Sie dieses Plugin NICHT zu Ihrem Cookie-Consent-Banner hinzufügen.
| Feature | ALTCHA (dieses Plugin) | 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 |
bin/console cache:clearbin/console theme:compile"Max. Anfragen" oder "Zeitfenster" in der 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.
Kommerzielle Lizenz - Einzelinstallations-Lizenz inklusive:
Siehe LICENSE-Datei für vollständige Bedingungen.
Bei Fragen und Support:
Markus Michalski
E-Mail: support@markus-michalski.net