Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net
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=registergeprü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.
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.twigeine 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-Template zeigt nur dann etwas an, wenn ALTCHA oder Honeypot aktiv ist. Es besteht aus zwei Teilen:
aria-hidden="true", der per Inline-Style außerhalb des sichtbaren Bereichs positioniert ist. Darin liegen ein Label (Text aus dem Schlüssel MMD_ALTCHA_HONEYPOT_LABEL) und ein Textfeld mit dem konfigurierten Feldnamen als name und id (Standard website), leerem value, autocomplete="off" und tabindex="-1".altcha-widget mit challengeurl, hidefooter, hidelogo und auto="onsubmit". Die Aufgabe wird also erst beim Absenden des Formulars gelöst.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.
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 |
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.