Skip to main contentSkip to footer
Anleitungen zu Plugins

Spamschutz für Gravity Forms ohne Captcha

Patrick Schlesinger
ReportedIP Hive plugin guide banner: Gravity Forms spam protection without a captcha

Der Spamschutz von Gravity Forms ohne Captcha bedeutet, dass die Website überprüft, ob das Formular von einem echten Browser dargestellt und übermittelt wurde, anstatt den Besucher aufzufordern, dies nachzuweisen. ReportedIP Hive leistet genau dies für Gravity Forms: Die Übermittlung durch einen Bot wird als Validierungsfehler oberhalb des Formulars abgelehnt, es wird kein Eintrag erstellt, und ein echter Absender sieht niemals ein Rätsel, ein Bild oder einen zusätzlichen Schritt.

Der Gravity Forms-Adapter ist Bestandteil des Business-Tarifs und lässt sich über einen Schalter auf der Seite „Schutz“ unter „Formularschutz“ aktivieren. Er wurde mit Hive 2.1.63 eingeführt und ist mit Gravity Forms 3.1 getestet.

Warum ein Captcha das falsche Mittel für ein Kontaktformular ist

Ein Captcha überträgt die Arbeit auf die falsche Person. Der Absender, der Sie erreichen möchte, muss verzerrte Buchstaben entziffern oder auf Ampeln klicken; das Skript, das das Formular mit Anfragen überflutet, würde es ohnehin nie lösen und wechselt einfach zu einer Website mit einem schwächeren Captcha. Jeder fehlgeschlagene Versuch kostet Sie eine Nachricht, und Sie erfahren nie, wie viele aufgegeben haben.

Bots lassen sich in zwei Gruppen einteilen, und ein Formular muss beide berücksichtigen. Die erste Gruppe füllt jedes Feld aus, das sie findet, einschließlich desjenigen, das sie eigentlich überspringen sollte. Die zweite Gruppe lädt die Seite gar nicht erst: Sie sendet ihre Daten direkt an den Endpoint, wobei die Nutzdaten aus einer echten Übermittlung kopiert werden. Gravity Forms liefert ein eigenes Honeypot-Feld für die erste Gruppe mit. Die zweite Gruppe umgeht den Honeypot, da sie das Markup, das diesen enthält, niemals rendert.

Wie der Ausführungsnachweis eine Übermittlung über Gravity Forms bewertet

Hive fügt in jedes Gravity Forms-Formular auf der Seite ein unsichtbares Ankerfeld ein, das von der Tabulatorreihenfolge und von Bildschirmleseprogrammen ausgeschlossen ist. Ein kleines Skript fügt anschließend ein zweites Feld hinzu, dessen Name bei jeder Installation unterschiedlich ist, sodass eine auf einer Website aufgezeichnete Payload auf keiner anderen passt. Beim Absenden liest der Server beide Felder aus und ordnet die Anfrage einer von vier Bewertungen zu:

BewertungWas die Übermittlung enthieltWas geschieht
provedAnker leer, Prüffeld vorhandenEin Browser hat das Formular dargestellt und das dazugehörige Skript ausgeführt. Der Eintrag wird gespeichert.
trippedDas Ankerfeld wurde ausgefülltAbgelehnt. Ein ausgefülltes, unsichtbares Feld stellt eine Automatisierung dar, für die es keine plausible Erklärung gibt, und die Adresse rückt in der Blockhierarchie nach oben.
failedAnker leer, Prüffeld fehlt, die Website weiß, dass das Feld dargestellt wirdAbgelehnt. Die Seite wurde abgerufen, das Skript wurde jedoch nie ausgeführt.
absentKeines der beiden Felder ist vorhandenNachsichtig. Hive hat auf dieser Website noch nicht gesehen, dass es das Feld selbst darstellt, daher wird nichts bewertet.

Es gelangen keine anfragespezifischen Daten in den HTML-Code. Der Anker bleibt bei jedem Laden der Seite derselbe, der zufällig generierte Name ist im Skript hinterlegt, sodass ein Seitencache das Formular so lange wie gewünscht bereitstellen kann, ohne dass auch nur ein einziger Besucher ausgesperrt wird.

Gravity Forms übermittelt seine Formulare selbst

Die meisten Formular-Plugins senden die Daten über das normale „submit“-Ereignis des Browsers ab; genau an dieser Stelle füllt das Skript von Hive das Prüffeld aus. Gravity Forms verfährt anders: Es erfasst und übermittelt das Formular eigenständig und löst dabei kein „submit“-Ereignis aus. Es veröffentlicht jedoch einen JavaScript-Filter genau für diesen Moment, gform/submission/pre_submission, denselben, den auch sein eigenes unsichtbares Captcha verwendet. Hive bindet sich an diesen Filter, füllt das Prüffeld aus und gibt das Formular zurück.

Auf dem Server wird der Anker über gform_form_tag eingefügt, sodass er innerhalb des Formularelements platziert wird, ohne dass im Markup nach einem schließenden Tag gesucht wird, und die Entscheidung erfolgt über gform_validation, den Hook, den Gravity Forms bei jeder Übermittlung ausführt, bevor ein Eintrag geschrieben wird.

Mehrseitige Formulare werden einmalig auf der letzten Seite ausgewertet

Ein mehrseitiges Formular sendet jede Seite als eigenständige Anfrage. Da nur die letzte Seite eine Übermittlung darstellt, wird auch nur diese bewertet. Würde jeder Schritt bewertet, würden eine berechnete Antwort und eine Community-Abfrage unnötig verbraucht. Formulare, die im Hintergrund gesendet werden, also im AJAX-Modus, den die meisten Websites verwenden, werden genauso behandelt wie ein Formular, das mit einem Neuladen der Seite gesendet wird, und die Ablehnung wird bei beiden Vorgehensweisen oberhalb des Formulars angezeigt.

Ein verspätet eingehendes Formular wird erneut entgegengenommen

Ein Gravity Forms-Formular, das nach einer fehlgeschlagenen Validierung oder innerhalb eines Popups ein zweites Mal gerendert wird, trifft erst nach dem ersten Durchlauf des Skripts ein. Hive wartet auf das plugin-eigene Render-Ereignis und nimmt das Formular erneut auf: Es liest die Challenge aus, startet die Uhr neu und bindet den Übermittlungsfilter. Vor Version 2.1.63 fand ein solches Formular keine berechnete Antwort vor und wurde als nicht nachgewiesen abgelehnt; dies wurde behoben.

Warum eine abgelehnte Einreichung als Validierungsfehler und nicht als Eintrag im Spam-Ordner gilt

Gravity Forms verfügt über einen Spam-Ordner, und der Adapter hätte abgelehnte Einsendungen dort ablegen können. Dies geschieht jedoch bewusst nicht. Ein Eintrag im Spam-Ordner ist eine Nachricht, für die dem Absender gedankt wurde und die der Betreiber niemals liest. War die Entscheidung falsch, geht die Person, die Ihnen geschrieben hat, davon aus, dass ihre Nachricht angekommen ist, und wartet auf eine Antwort, die niemals kommt.

Eine Ablehnung durch Hive ist stattdessen ein Validierungsfehler auf Formularebene, derselbe Mechanismus, den Gravity Forms für seine eigene Meldung „Mindestens ein Feld muss ausgefüllt werden“ verwendet. Der Absender sieht die Meldung oberhalb des Formulars, kann den Grund dafür nachlesen und es erneut versuchen. Es wird kein Eintrag gespeichert, es erfolgt keine Benachrichtigung und es wird keine Bestätigungsseite angezeigt. Dieses Plugin verliert niemals eine Nachricht, ohne den Absender zumindest darüber zu informieren.

Was ein Bot sieht und was ein Besucher sieht

Echter BesucherSkriptübermittlung an den EndpointEin Bot, der jedes Feld ausfüllt
Lädt die SeiteJaNeinJa
Führt das Skript ausJaNeinIn der Regel nicht
PrüffeldVorhandenFehltFehlend oder falsch
AnkerfeldLeerLeer oder fehltAusgefüllt
Zusätzlicher Schritt für den MenschenKeiner
ErgebnisEintrag gespeichertÜber dem Formular abgelehntAbgelehnt, Adresse gezählt

Was die Überprüfung jedoch nicht leisten kann, ist, eine echte Person von einem Botnetz zu unterscheiden, das einen echten Browser steuert. Sie unterscheidet lediglich einen Browser von einem Skript. Für die hinter dem Browser liegende Adresse führt Hive eine zweite, unabhängige Überprüfung durch: Die Community-Bedrohungsprüfung lehnt eine Übermittlung von einer Adresse ab, von der aus die Website eine Anmeldung ablehnen würde, und zwar auf der Schutzstufe, die die Anmeldeseite vorschreibt, und dem Absender wird mitgeteilt, warum. Für diese Überprüfung ist der „Community Network“-Modus erforderlich; der Ausführungsnachweis funktioniert auch im „Local Shield“-Modus, wobei keine Daten die Website verlassen.

Über die Gravity Forms-API übermittelte Daten werden niemals ausgewertet

Ein Import, ein Zapier-Feed oder ein REST-Aufruf über die Gravity Forms-API enthält weder einen Anker noch ein Prüffeld, und ohne eine entsprechende Regel würde jeder dieser Vorgänge als Client gewertet werden, der die Überprüfung nicht bestanden hat. Hive fragt den Validierungs-Hook ab, ob die Übermittlung von einem Browser stammt, und greift in allen anderen Fällen nicht ein. Seit Gravity Forms 2.6.4 gibt der Hook diese Information selbst an; bei älteren Plugin-Versionen fragt Hive dies auf die gleiche Weise ab, wie es der plugin-eigene Honeypot tut.

In vier Schritten einschalten

  1. Aktualisieren Sie auf Hive 2.1.63 oder höher mit einem Business-Tarif. Bei einem niedrigeren Tarif bleibt der Schalter „Gravity Forms“ sichtbar und gesperrt, der benötigte Tarif steht daneben.
  2. Aktivieren Sie den Schalter „Gravity Forms“ auf der Seite „Schutz“ unter „Formularschutz“. Durch das Aktivieren werden die üblichen Seiten-Caches geleert, und für 24 Stunden wird eine Übermittlung, die den Nachweis nie enthalten hat, weiterhin akzeptiert, sodass eine ohne dieses Feld zwischengespeicherte Seite niemanden ausschließen kann. Der Filter reportedip_hive_form_adapters_grace verschafft Ihnen mehr Spielraum auf einer Website, deren Cache länger als einen Tag bestehen bleibt.
  3. Starten Sie den Selbsttest unter „Werkzeuge“ → „Diagnose“. Die Karte listet auf, was aktiviert ist, und führt anschließend drei Durchläufe mit dem Browser durch, den Sie gerade nutzen: als Besucher, zweimal als derselbe Besucher und als Bot. Es wird kein echtes Formular übermittelt, es wird keine E-Mail versendet und es wird kein Eintrag gespeichert. Ein unsichtbarer Schutz lässt sich ansonsten nur schwer von gar keinem Schutz unterscheiden.
  4. Sie können wahlweise im Report-Only Mode starten, in dem jedes Ergebnis protokolliert und nichts abgelehnt wird. Anhand der Protokolle einer Woche lässt sich erkennen, was abgelehnt worden wäre, noch bevor tatsächlich etwas abgelehnt wird.

Die Berechnungsprüfung, die ab der Professional-Version und somit auch in der Business-Version enthalten ist, schließt die einzige Lücke, die das einfache Prüffeld offen lässt: das Auslesen des Feldnamens aus der Seite und dessen erneutes Absenden. Der Browser führt im Hintergrund eine kleine Berechnung durch, jede Antwort wird einmal akzeptiert, und der Absender bemerkt weiterhin nichts davon. Hierfür ist HTTPS erforderlich; ohne HTTPS entscheidet weiterhin das einfache Prüffeld.

Welche Formular-Plugins erhalten denselben Schutz

FormularTarifGetestet mit
Formulare für Kommentare, Registrierung und PasswortwiederherstellungKostenlosWordPress-Kern, WooCommerce, Multisite
Ihre eigenen Formulare über die Formular-APIKostenlosDrei Aufrufe: field, check, passes
Contact Form 7Jeder TarifDie auf WordPress.org veröffentlichte Version
Gravity FormsBusiness3.1, einschließlich mehrseitiger Formulare und Hintergrundformulare
Formidable Forms und Formidable Forms PROBusiness6.35
Elementor-FormulareBusinessElementor PRO 3.34: das Formular-Widget ist ausschließlich dort verfügbar
Ultimate MemberBusiness2.13, Formulare für die Anmeldung, Registrierung und Passworteingabe

Jedes Plugin verfügt über einen eigenen Schalter. Die gesamte Ebene, der Hauptschalter, ein zweiter Schalter, der die Registrierung und das Zurücksetzen des Passworts ausklammert, sowie der Report-Only Mode befinden sich gemeinsam auf der Seite „Schutz“. REPORTEDIP_HIVE_DISABLE_FORM_PROOF in wp-config.php deaktiviert die Ebene für den Fall, dass ein Besucher keine Daten übermitteln kann und Sie die Website vor der Fehlersuche funktionsfähig halten müssen.

Häufig gestellte Fragen

Benötigt Gravity Forms auch bei aktiviertem Hive noch ein Captcha?

Nicht gegen Skripte und Bots. Der Ausführungsnachweis erkennt eine Übermittlung, bei der das Formular nie gerendert wurde, sowie einen Bot, der das unsichtbare Feld ausfüllt, und die Community-Bedrohungsprüfung lehnt eine Adresse ab, die dem Netzwerk bereits bekannt ist. Ein Captcha trägt dazu nichts bei, außer einem zusätzlichen Schritt, den der Absender ausführen muss. Kein Feld ist in der Lage, eine Person von einem Botnetz zu unterscheiden, das einen echten Browser steuert, und auch ein Captcha kann dies nicht leisten.

Funktioniert es in Verbindung mit Akismet oder dem Honeypot von Gravity Forms?

Ja. Hive bewertet die Einreichung im Validierungs-Hook, noch bevor ein Eintrag erstellt wird. Eine abgelehnte Einreichung gelangt niemals in die Eintragsliste, den Spam-Ordner oder ein anderes Anti-Spam-Plugin. Alles, was die Prüfung besteht, wird an die von Ihnen bereits durchgeführten Überprüfungen weitergeleitet.

Was geschieht mit einem Besucher, bei dem JavaScript deaktiviert ist?

Bei den Formular-Plugins wird eine Übermittlung ohne Nachweis mit einer entsprechenden Begründung abgelehnt, da es bei einem Kontaktformular keine Moderationswarteschlange gibt, auf die zurückgegriffen werden könnte. Beim Kommentarformular erfordert derselbe Fall lediglich einen Moderationsschritt. Eine Website mit vielen solchen Besuchern kann die Ebene im Report-Only Mode betreiben oder den Gravity-Forms-Schalter ausgeschaltet lassen und die kostenlosen Formulare weiterhin abdecken.

Verlangsamt diese Überprüfung das Formular oder beeinträchtigt sie die Seitenzwischenspeicherung?

Nein. Der Anker ist bei jedem Seitenaufruf identisch, und es gelangen keine anfragespezifischen Daten in den HTML-Code; daher bleibt eine zwischengespeicherte Seite gültig. Das Skript füllt zum Zeitpunkt der Übermittlung ein Feld aus und misst, wie lange das Formular auf dem Bildschirm angezeigt wurde; der Startpunkt wird vom Browser ermittelt, niemals aus dem Markup, sodass eine zwischengespeicherte Seite keinen veralteten Wert enthalten kann.

Ist das DSGVO-konform?

Der Test erfasst keine weiteren Informationen über den Besucher als die Tatsache, ob beim Absenden zwei versteckte Felder vorhanden waren und wie viele Sekunden lang das Formular auf dem Bildschirm angezeigt wurde. Kein Fingerprinting, keine Anfragen an Dritte, keine Bilder, die von einer anderen Domain bereitgestellt werden. Im „Local Shield“-Modus verlassen überhaupt keine Daten die Website. Die Dokumentation des WordPress-Plugins enthält eine vollständige Übersicht über den Umgang mit Daten.

Weiterführende Artikel

In der Dokumentation zum WordPress-Plugin finden Sie eine vollständige Übersicht über die Einstellungen sowie einen Vergleich der Tarife, aus dem hervorgeht, welche Leistungen der „Business“-Tarif umfasst. Entdecken Sie ReportedIP Hive →

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fill out this field
Fill out this field
Bitte geben Sie eine gültige E-Mail-Adresse ein.
You need to agree with the terms to proceed