TYPO3 Formhandler – Spam vermeiden ohne Captcha

Captchas halte ich persönlich für ein äußerst nerviges Mittel Spam zu vermeiden. Viele Captchas sind nicht so ohne weiteres lesbar und stellen für viele Menschen eine große Hürde dar. Sofern die Extension Formhandler eingesetzt wird gibt es eine einfache Möglichkeit Spam zu vermeiden.

Mittels eines Time-Checks kann man prüfen wie lange das Ausfüllen des Formulars gedauert hat. Da Spam zum größten Teil vollautomatisiert geschieht kann man einfach einen Wert einsetzen, der klein genug ist, dass ein echter Besucher niemals ein Formular in dieser Zeit ausfüllen kann. Ein Computer wird immer schneller mit dem ausfüllen sein.

Ich habe sehr gute Erfahrungen mit Werten zwischen 5 und 10 Sekunden gemacht, je nach Umfang des Formulars kann der Wert auch noch größer angesetzt werden. Das Spam Aufkommen ist durch so einen Time-Check in mehreren Kundenprojekten nahezu verschwunden.

Jetzt aber zum praktischen Teil.

Die folgende Typoscript Konfiguration muss vorgenommen werden um den Time-Check in Formhandler durchzuführen.


plugin.Tx_Formhandler.settings.predef.contact {
[...]
  saveInterceptors {
    10.class = Interceptor\AntiSpamFormTime
    10.config {
      # ID of a page to redirect SPAM bots to
      redirectPage = 308
      minTime.value = 5
      minTime.unit = seconds
    }
  }
[...]
}

In der Konfiguration habe ich der Einfachheit halber direkt die Redirect Page eingetragen, diese Seite wird aufgerufen wenn das Formular in weniger als 5 Sekunden abgeschickt wurde. Besser ist es natürlich diese Einstellung über eine Konstante zu regeln.

Mit der obigen Einstellung haben wir dafür gesorgt, dass der Time-Check durchgeführt wird. In dem Formular muss jetzt noch ein verstecktes Feld untergebracht werden, welches den Timestamp der Zeit enthält zu der das Formular geladen wurde. Formhandler bietet einen Marker an, welcher das hidden Field mit den passenden Daten ausfüllt.

Mit dem folgenden HTML wird dem Formular ein entsprechendes Feld hinzugefügt:

<input type="hidden" name="###formValuesPrefix###[formtime]" value="###TIMESTAMP###" />

Mit diesen Änderungen ist das Formular angepasst, so dass ein Time-Check durchgeführt wird. Man muss noch eine Seite erstellen, welche angezeigt werden soll, wenn das Formular zu schnell abgeschickt wird. Dafür kann man jedoch auch einfach die Seite nutzen, welche angezeigt wird nachdem der Besucher das Formular korrekt ausgefüllt hat, da die Seite ein echter Besucher ja sowieso nicht sehen sollte und man somit potentiellen Spammern keinen Hinweis darauf gibt, dass der Spam Versuch nicht erfolgreich war.