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
Die Einstellungen findest du im Shopware Admin unter Erweiterungen > Meine Erweiterungen > ALTCHA Spam-Schutz. Jede Einstellung kannst du pro Verkaufskanal überschreiben. Die folgenden Abschnitte tragen die Titel der Karten, wie sie im Admin erscheinen.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Spam-Schutz aktivieren | an | Hauptschalter für alle Schutzfunktionen. Ist er aus, laufen weder Prüfungen noch Widget-Ausgabe |
| Newsletter-Formular schützen | an | Schutz für Newsletter-Anmeldeformulare |
| Registrierungsformular schützen | an | Schutz für die Kundenregistrierung, verhindert Fake-Konten |
Für das Kontaktformular gibt es keinen eigenen Schalter: Es ist geschützt, sobald der Hauptschalter an ist.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| ALTCHA-Widget aktivieren | an | Zeigt die "Ich bin kein Roboter"-Checkbox, die sich automatisch verifiziert. Ist die Einstellung aus, entfällt die ALTCHA-Prüfung, die übrigen Schichten bleiben aktiv |
| Challenge-Kosten (PBKDF2-Iterationen) | 2000 | Rechenaufwand pro Versuch im Browser, mindestens 1. Höher heißt schwerer und langsamer, für Bots wie für Besucher |
| Challenge-Schwierigkeit (max. Zähler) | 2000 | Obergrenze der Suche, mindestens 2. Jede Challenge braucht zwischen der Hälfte und der vollen Anzahl an Versuchen |
| Challenge-Gültigkeit (Sekunden) | 300 | Wie lange eine Challenge gültig ist, zwischen 30 und 3600 |
Zur Sicherheit begrenzt das Plugin die Kosten intern auf höchstens 100000 und den Zähler auf höchstens 1000000. Ein Wert von 0 oder ein leeres Feld fällt auf den Standard zurück.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Honeypot-Feld aktivieren | an | Fügt ein unsichtbares Feld hinzu, das Bots verrät. Echte Besucher bemerken es nicht |
Das Feld heißt fax_number, wird mit position:absolute; left:-9999px aus dem sichtbaren Bereich geschoben (nicht per display:none, das manche Bots überspringen) und trägt tabindex="-1" und autocomplete="off". Eine Absendung mit nicht leerem Feld wird abgelehnt. Ein Wert, der nur aus Leerzeichen besteht, gilt als leer und wird akzeptiert.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Mindest-Ausfüllzeit (Sekunden) | 3 | Absendungen, die schneller nach dem Anzeigen des Formulars eintreffen, gelten als Bot. 0 schaltet die Prüfung ab |
Das Formular trägt dafür einen signierten Render-Zeitstempel. Fehlt der Token oder ist er nicht echt, überspringt der Shop nur diese Schicht, die ALTCHA-Prüfung bleibt davon unberührt. Auf nicht zwischengespeicherten Seiten (zum Beispiel der Registrierung) greift die Prüfung zuverlässig. Auf HTTP-zwischengespeicherten CMS-Seiten (Kontakt, Newsletter) kann ein Bot, der die gecachte Seite abgreift, einen alten Token mitschicken und diese Schicht passieren, die übrigen Schichten greifen weiterhin.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Gibberish-Erkennung aktivieren | aus | Bewertet Name-, Betreff-, Nachrichten- und Adressfelder von 0 (normaler Text) bis 100 (Tastaturgeklapper) |
| Verdachtsschwelle (nur protokollieren) | 60 | Werte ab hier landen im Shopware-Log, werden aber nicht blockiert |
| Ablehnungsschwelle | 85 | Werte ab hier werden abgelehnt, erlaubt sind 1 bis 101. 101 heißt nur beobachten: Nichts wird abgelehnt, auffällige Werte werden weiter protokolliert |
Bewertet werden die Felder firstName, lastName, subject und comment sowie billingAddress.street und billingAddress.city, jeweils aus dem Formular, das sie mitschickt. Vor- und Nachname werden also bei Registrierung, Kontakt und Newsletter geprüft, Betreff und Nachricht beim Kontaktformular, Straße und Ort bei der Registrierung. Das schlechteste Feld entscheidet. Die Einträge im Log beginnen mit "ALTCHA gibberish check" und enthalten Aktion, Verkaufskanal, Score und Gründe, nie den Text selbst.
Empfehlung für die Einführung: Setze die Ablehnungsschwelle zunächst auf
101, sichte einige Tage die Log-Einträge und senke den Wert erst danach.
Wie der Score entsteht, steht unter Technische Details.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Wegwerf-E-Mail-Adressen ablehnen | aus | Lehnt Adressen bekannter Wegwerf-Postfach-Anbieter direkt ab |
| Zusätzlich blockierte Domains | leer | Eine Domain pro Zeile, Subdomains sind eingeschlossen. Zeilen mit # werden ignoriert. Wirkt auch bei der veralteten Inhaltsvalidierung |
| Immer erlaubte Domains | leer | Eine Domain pro Zeile. Hat Vorrang vor Liste und Sperrliste, Subdomains eingeschlossen, zum Beispiel für Datenschutz-Relay-Dienste deiner Kunden |
foo.mailinator.com passt, weil mailinator.com gelistet ist, notmailinator.com passt nicht. IDN-Domains werden in Punycode verglichen, wenn die PHP-Funktion idn_to_ascii (Extension intl) verfügbar ist. Geprüft wird das Feld email.disposable-email-domains (CC0) liegt dem Plugin bei, dazu einige fest eingebaute Zusatzdomains. Bei einer Prüfung ruft der Shop kein Netzwerk auf.var/mmd_altcha/. Ist sie nur für einen Verkaufskanal aktiv, führst du bin/console mmd:altcha:update-disposable-domains selbst aus. Ein fehlgeschlagener Download behält die bestehende Liste.Mehrere App-Knoten: Der Task aktualisiert die Liste nur auf dem Knoten, der ihn ausführt. Bei mehreren App-Knoten oder einem Read-Only-Container-Image führst du den Befehl auf jedem Knoten aus oder baust das Image neu, sonst nutzen die übrigen Knoten den mitgelieferten Snapshot.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Inhaltsvalidierung aktivieren | an | Prüft Vorname, Nachname, Straße, Ort und E-Mail-Adresse auf Gibberish und Wegwerf-Domain. Blockiert erst bei zwei oder mehr auffälligen Feldern |
Diese ältere, gröbere Prüfung ist zugunsten von Gibberish-Erkennung und Wegwerf-E-Mail-Prüfung veraltet. Sie wird übersprungen, sobald eine der beiden aktiv ist, und entfällt in einer künftigen Major-Version. Ohne diese beiden Optionen läuft sie mit den Standardwerten weiter.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| IP-basiertes Rate Limiting aktivieren | an | Begrenzt Formular-Absendungen pro IP-Adresse |
| Max. Anfragen | 3 | Maximale Anzahl pro Zeitfenster |
| Zeitfenster (Minuten) | 60 | Länge des gleitenden Zeitfensters |
Das Limit gilt getrennt pro Formular (Kontakt, Newsletter, Registrierung) und pro IP-Adresse. Gezählt werden nur Absendungen, die alle vorherigen Prüfungen bestanden haben: Eine abgelehnte Absendung verbraucht kein Kontingent.
Hinter einem Reverse Proxy oder CDN sieht der Shop nur dann die echte Besucher-IP, wenn die vertrauenswürdigen Proxys in Symfony konfiguriert sind. Andernfalls teilen sich alle Besucher dieselbe Adresse und damit dasselbe Limit.
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Challenge Rate Limiting aktivieren | an | Begrenzt Anfragen an /altcha/challenge pro IP |
| Max. Challenges pro IP | 30 | Maximale Anzahl pro Zeitfenster |
| Zeitfenster (Minuten) | 60 | Zeitfenster für das Challenge-Limit |
Das Limit liegt bewusst höher als beim Formular, weil eine Seite mehrere Formulare mit je einer Challenge laden kann.
Spam-Schutz aktivieren: an
ALTCHA-Widget aktivieren: an
Challenge-Kosten: 4000
Gibberish-Erkennung aktivieren: an
Ablehnungsschwelle: 75
Wegwerf-E-Mail-Adressen ablehnen: an
Max. Anfragen: 2
Mindest-Ausfüllzeit: 5
Gibberish-Erkennung aktivieren: an
Ablehnungsschwelle: 101 (nur beobachten, erst nach Log-Sichtung senken)
Wegwerf-E-Mail-Adressen ablehnen: aus
Gibberish-Erkennung aktivieren: an
Verdachtsschwelle: 70
Ablehnungsschwelle: 90
Die Trigramm-Tabelle der Gibberish-Erkennung deckt Deutsch, Englisch, Französisch, Spanisch, Italienisch und Niederländisch ab, deshalb setzt du die Schwellen bei vielen anderen Sprachen höher an.