Markus Michalski FAQ

ALTCHA Spam-Schutz: Storefront

Storefront-Integration des ALTCHA Spam-Schutz Moduls für OXID 7: geschützte Formulare, Template-Overrides für das Apex-Theme, Widget, Honeypot, ViewConfig-Methoden und Einbau in andere Themes.

English Version

Zurück zur Übersicht

ALTCHA Spam-Schutz: Storefront

Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net

Geschützte Formulare

Das Modul erweitert vier OXID-Klassen: die drei Formularklassen ContactController, NewsletterController und UserComponent sowie als vierte ViewConfig für die Template-Methoden. Geprüft werden nur diese drei Absendungen:

Formular Erweiterte Methode Aktion (Rate Limit) Ausgewertete Felder
Kontaktformular ContactController::send contact_form editval[oxuser__oxfname], editval[oxuser__oxlname], editval[oxuser__oxusername]
Newsletter-Anmeldung NewsletterController::send newsletter_subscribe editval[oxuser__oxfname], editval[oxuser__oxlname], editval[oxuser__oxusername]
Registrierung UserComponent::createUser, nur bei cl=register registration lgn_usr, invadr[oxuser__oxfname], invadr[oxuser__oxlname], invadr[oxuser__oxstreet], invadr[oxuser__oxcity]

Die Registrierung wird nur auf der Seite cl=register geprüft (Groß- und Kleinschreibung spielen keine Rolle). Die Registrierung im Bestellvorgang (cl=user) und alle anderen Formulare, etwa Login oder Passwort-Reset, sind nicht geschützt.

Die URLs der Seiten spielen keine Rolle, entscheidend sind Controller und Methode. Die Absendung muss die Lösung im POST-Feld altcha mitschicken, das das Widget automatisch ergänzt.

Template-Overrides

Das Modul bringt Template-Erweiterungen nur für das Theme Apex mit. Sie liegen unter views/twig/extensions/themes/apex/:

Datei Wirkung
form/contact.html.twig Erweitert form/contact.html.twig und fügt im Block captcha_form das Widget ein
form/newsletter.html.twig Erweitert form/newsletter.html.twig und fügt im Block newsletter_form_captcha das Widget ein
form/register.html.twig Ersetzt das Registrierungsformular des Apex-Themes vollständig und setzt das Widget zwischen die Kontodaten und die Rechnungsadresse
layout/base.html.twig Fügt im Block base_js das Widget-Skript ein, wenn getAltchaEnabled() wahr ist. Es wird kein CSS eingebunden

Das Widget selbst steht in views/twig/widget/altcha_widget.html.twig und ist unter dem Namen @mmd_altcha/widget/altcha_widget registriert.

Da form/register.html.twig eine Kopie des Apex-Formulars ist, übernimmt es spätere Änderungen des Themes an dieser Datei nicht. Prüfe sie nach einem Theme-Update.

Das Widget

Das Widget-Template zeigt nur dann etwas an, wenn ALTCHA oder Honeypot aktiv ist. Es besteht aus zwei Teilen:

Die Beschriftungen des Widgets kommen aus den Frontend-Übersetzungen:

Schlüssel Deutsch Englisch
MMD_ALTCHA_LABEL Ich bin kein Roboter I am not a robot
MMD_ALTCHA_VERIFYING Verifiziere... Verifying...
MMD_ALTCHA_VERIFIED Verifiziert Verified
MMD_ALTCHA_ERROR Fehler bei der Verifizierung Verification error
MMD_ALTCHA_EXPIRED Verifizierung abgelaufen Verification expired
MMD_ALTCHA_HONEYPOT_LABEL Bitte leer lassen Leave this empty

Die Fehlermeldungen nach einer abgelehnten Absendung stehen auf der Seite Fehlerbehebung.

ViewConfig-Methoden

Das Modul erweitert ViewConfig um diese Methoden, die in Templates über oViewConf erreichbar sind:

Methode Rückgabe
getAltchaEnabled() Wahr, wenn "Spam-Schutz aktivieren" und "ALTCHA aktivieren" an sind
getHoneypotEnabled() Wahr, wenn "Spam-Schutz aktivieren" und "Honeypot aktivieren" an sind
getHoneypotFieldName() Konfigurierter Honeypot-Feldname
getAltchaChallengeUrl() URL des Challenge-Endpunkts, gebildet aus dem Self-Link plus cl=mmd_altcha_challenge&fnc=getChallenge
isSpamProtectionEnabled() Wahr, wenn "Spam-Schutz aktivieren" an ist

Andere Themes

Für andere Themes als Apex liefert das Modul keine Templates. Der Server prüft die Absendungen trotzdem, und ohne Widget fehlt in jedem Fall die ALTCHA-Lösung, sodass Kontakt, Newsletter und Registrierung abgelehnt werden. Du musst die Integration deshalb selbst einbauen:

{# im Formular, dort wo das Widget erscheinen soll #}
{% include "@mmd_altcha/widget/altcha_widget.html.twig" %}

{# im Block base_js des Layouts, einmal pro Seite #}
{% if oViewConf.getAltchaEnabled() %}
    <script type="module" src="https://cdn.jsdelivr.net/npm/altcha@latest/dist/altcha.min.js"></script>
{% endif %}

Ist "ALTCHA aktivieren" ausgeschaltet, erscheint kein Widget und der Server verlangt auch keine Lösung. Honeypot, Inhaltsvalidierung und Rate Limiting laufen weiter.