Zum Inhalt springen

ALTCHA

WP-ImmoMakler unterstützt den datenschutzfreundlichen Spam-Schutz ALTCHA. Er wird vollständig lokal von Ihrem WordPress-Server geladen, ohne Verbindung zu Drittanbietern und ohne Cookies.

ALTCHA stellt dem Browser Ihres Besuchers eine automatisierte Rechenaufgabe (ein sogenanntes Proof-of-Work). Der Browser löst sie im Hintergrund, sobald die Seite geladen ist – währenddessen füllt Ihr Besucher das Formular aus. Sichtbar ist lediglich ein kleines Feld, das die erfolgreiche Prüfung bestätigt:

Das ALTCHA-Feld im Kontaktformular mit der Bestätigung Überprüft

Ihre Besucher müssen also kein Rätsel lösen und nichts anklicken. Für einen Spam-Bot, der massenhaft Formulare abschickt, summiert sich der Rechenaufwand dagegen zu einer echten Hürde.

Der Server prüft anschließend, ob die eingereichte Lösung zu einer Aufgabe passt, die er selbst ausgegeben hat. Jede Aufgabe ist nur einmal und nur für eine begrenzte Zeit gültig.

ALTCHA ist voreingestellt – Sie müssen nichts einrichten. Sie finden die Auswahl im Backend Ihrer Website (wp-admin) unter WP-ImmoMakler → Einstellungen → Spam-Schutz → Stufe 2: CAPTCHA-Anbieter, falls Sie stattdessen einen anderen Anbieter oder „Kein CAPTCHA (nur Stufe 1)” wählen möchten. Es sind keine weiteren Einstellungen und kein externer Account erforderlich – anders als bei den extern gehosteten CAPTCHAs, die alle einen Sitekey und Secret Key voraussetzen.

Die Einstellung gilt für alle Formulare des Plugins:

  • Die Rechenaufgabe wird von Ihrem eigenen Server erzeugt und geprüft. Es besteht keine Verbindung zu Servern Dritter.
  • Es werden keine Cookies gesetzt.
  • Es werden keine Verhaltensdaten Ihrer Besucher (Mausbewegungen, Tastatureingaben) erhoben.
  • Übertragen wird ausschließlich die Lösung der Rechenaufgabe – ein zufälliger Zahlenwert samt Prüfsumme.

Der Hinweis „Geschützt durch ALTCHA” im Feld ist ein reiner Textlink auf altcha.org. Er lädt keine Inhalte von dort nach.

Der Browser holt die Rechenaufgabe über einen WordPress-REST-API-Endpunkt:

GET /wp-json/immomakler/v1/altcha/challenge

Die Antwort ist absichtlich nicht cachebar (Cache-Control: no-store), da jede Aufgabe nur einmal gültig ist.

WP-ImmoMakler wählt das Rechenverfahren nach den Möglichkeiten Ihres Servers:

  • Argon2id, wenn die PHP-Erweiterung sodium geladen ist – bei nahezu allen Hostern der Fall. Argon2id ist speicherhart: Jeder Rechenschritt belegt 64 MB Arbeitsspeicher. Für den Browser Ihres Besuchers ist das unerheblich, ein Spam-Bot kann so aber nicht auf Grafikkarten ausweichen, die sonst Tausende Aufgaben gleichzeitig lösen würden.
  • PBKDF2/SHA-256 andernfalls. Es benötigt keine Erweiterung und keinen nennenswerten Speicher, lässt sich aber auf Grafikkarten deutlich schneller berechnen als im Browser.

Beide Voreinstellungen entsprechen der Empfehlung von ALTCHA für das jeweilige Verfahren:

ParameterArgon2idPBKDF2/SHA-256Beschreibung
algorithmARGON2IDPBKDF2/SHA-256Rechenverfahren für die Aufgabe
Iterationen (cost)15.000Aufwand je Rechenschritt
Speicher (memory_cost)65.536 KiB (64 MB)–Speicher je Rechenschritt
Rechenschritte (counter)100–2005.000–10.000Anzahl der Schritte bis zur Lösung
Gültigkeit30 Minuten30 MinutenDanach verfällt die Aufgabe
MehrfachnutzungausgeschlossenausgeschlossenJede gelöste Aufgabe gilt für genau eine Übermittlung

Auf einem Desktop-Rechner ist die Aufgabe mit beiden Verfahren in etwa zwei bis drei Sekunden gelöst, auf einem Mittelklasse-Smartphone in etwa zehn Sekunden. Da die Berechnung beim Laden der Seite beginnt, ist sie in der Praxis abgeschlossen, bevor das Formular fertig ausgefüllt ist. Ein Bot muss dieselbe Aufgabe für jede einzelne Übermittlung neu lösen und zahlt damit pro Übermittlung dieselbe Rechenzeit.

Der Argon2id-Rechenkern wird als eigene Datei aus dem Plugin-Verzeichnis geladen (vendors/altcha/workers/argon2id.js). Ist der Speicher auf Ihrem Server knapp, sodass Argon2id dort nicht berechnet werden kann, stellt WP-ImmoMakler die betroffene Aufgabe automatisch mit PBKDF2 und vermerkt das im Protokoll.

Erhalten Sie trotz aktiviertem ALTCHA weiterhin Spam, können Sie den Rechenaufwand über einen Filter erhöhen. Der Filter erhält die Voreinstellungen des Verfahrens, das Ihr Server verwendet; das folgende Beispiel verdoppelt den Aufwand für beide. Beachten Sie, dass damit auch die Wartezeit auf schwachen Geräten steigt.

add_filter( 'immomakler_altcha_challenge_options', function ( $options ) {
$options['counter_min'] *= 2;
$options['counter_max'] *= 2;
return $options;
} );

Erhöhen Sie dabei die Rechenschritte (counter) und nicht die Iterationen (cost) oder den Speicher (memory_cost): Der Aufwand für den Browser ist in jedem Fall das Produkt der Werte, aber Iterationen und Speicher bestimmen zusätzlich, wie lange Ihr Server für das Erzeugen und Prüfen jeder Aufgabe braucht.

Über denselben Filter legen Sie das Verfahren fest. Das ist nötig, wenn der Argon2id-Rechenkern in Ihrem Setup nicht geladen werden kann – etwa, weil ein Optimierungs-Plugin oder ein CDN die Dateien des Plugin-Verzeichnisses unter einer anderen Domain ausliefert:

add_filter( 'immomakler_altcha_challenge_options', function ( $options ) {
$options['algorithm'] = 'PBKDF2/SHA-256';
return $options;
} );

Nennt der Filter ein Verfahren, das Ihr Server nicht beherrscht, wird der Filter als Ganzes ignoriert – seine Rechenschritte wären für ein anderes Verfahren um ein Vielfaches zu schwach oder zu langsam.

Der Spam-Schutz hängt sich über folgenden Filter in die Validierung des Kontaktformulars ein:

// Eigene Validierungslogik ergänzen
add_filter( 'immomakler_contact_form_errors_in_send', function( $errors ) {
// $errors['mein_fehler'] = true;
return $errors;
} );

Die Fehlermeldung, die bei einer fehlgeschlagenen Prüfung erscheint, lässt sich anpassen:

add_filter( 'immomakler_contactform_altcha_validationfailed', function ( $html ) {
return '<div class="alert alert-danger" role="alert">Bitte versuchen Sie es erneut.</div>';
} );