Spam Detector

Für Formular kann der Spam-Detector aktiviert werden um zu ermitteln ob das Formular von einem echten Nutzer ausgefüllt wurde. Um den Spam-Detector zu aktivieren muss der FormFactory ein dem PHP-Array des Feld spamProtection => true übergeben werden. Für alle Formulare mit Ausnahme der Such-Formulare die im SiteKit bereits definiert sind, ist diese Option aktiviert.

Hierbei werden folgende Regeln angewendet.

Honeypot

In dem Formular ist ein verstecktes Feld enthalten. Ein normaler Nutzer kann dieses Feld nicht ausfüllen, da es nicht zu sehen ist. Ein Spam-Bot würde dieses Feld ggf. ausfüllen und könnte so erkannt werden.

Submit-Zähler pro IP-Adresse

Pro IP-Adresse wird jeder Submit gezählt. Überschreitet die Anzahl der Submit pro Minute den erlaubten Wert, wird dies als SPAM gewertet. Hierbei können folgenden Konfigurationen vorgenommen werden.

php/config/controller/form/spamDetector.php

'submitByIpCounter' => [
	// Zeitspanne in der der Zähler verwendet wird.
	'ttl' => 10,
	// Anzahl an Submits ab dem der Counter ermittelt wird.
	'threshold' => 5,
	// Anzahl der Submits die pro Minute von einer IP-Adresse gesendet werden dürfen
	'max' => 10
]

Blacklist von IP-Adressen

Es können IP-Adressen hinterlegt werden, für die generell kein Submit akzeptiert wird.

php/config/controller/form/spamDetector.php

// List von IP-Adressen die blockiert werden sollen
'blacklist' => [
]

Token

Für ein Formular wird ein Token erzeugt, der genau einmal verwendet werden kann. Der Token enthält Zeitstempel und IP-Adresse des Nutzers in verschlüsselter Form. Beim Submit des Formulars wird überprüft, ob der Token noch gültig ist. Ein Token kann nur einmal verwendet werden. Hiermit ist auch ein Schutz vor CSRF (https://de.wikipedia.org/wiki/Cross-Site-Request-Forgery) gewährleiste.

Hierbei können folgenden Konfigurationen vorgenommen werden.

php/config/controller/form/spamDetector.php

'token' => [
	'cryptKey' => 'geheim',
	// Zeit in Sekunden, in der der Token gültig ist
	'ttl' => 15 * 60,
	// Zeit in Sekunden, in dem der Token noch nicht gültig ist
	'minTime' => 2
]