Spam trotz Captcha
Auf Grund einer wachsenden Spamflut in den Kommentaren habe ich mich dazu entschlossen ein Captcha in ve_guestbook zu integrieren. Etwas erstaunt war ich, daß dies die Spammer überhaupt nicht beeindruckte...
Im Gegenteil, bis zu 50 Spambeiträge wurden täglich neu eingetragen. Wie dies automatisch trotz Captcha funktionierte, war mir doch schleierhaft. Bei meinen manuellen Tests funktionierte das Captcha nämlich wie erwartet. Ach ja, die verwendete Captcha Extension ist Captcha Library (Key: captcha).
Um dem Problem auf die Spur zu kommen, habe ich in die Benachrichtigungsmails zunächst so erweitert, daß mir auch der eingegebene Captcha-String mit angezeigt wird. Sehr unwahrscheinlich, daß die wirklich das Bild parsen. Und siehe da, der übermittelte String war tatsächlich leer. Ein genauer Blick in den Code von ve_guestbook und captcha zeigte dann woran es lag.
Das captcha erzeugt eine Grafik mit dem Captcha-String. Gleichzeitig legt es den verwendeten String in die PHP-Session des aktuellen Nutzers. Wenn nun ein neuer Kommentar erstellt wird, holt sich ve_guestbook den Captcha-String aus der Session und vergleicht ihn mit den String des Nutzers.
Wenn aber ein Bot eine Nachricht schreibt, dann füllt er nicht vorher das Formular aus und lädt das Captcha-Bild. Er posted direkt die entsprechenden Daten. Ergebnis: In der Session liegt überhaupt kein Captcha-String. Also vergleicht ve_guestbook zwei leere Strings...
Abhilfe kann man schaffen, indem man zusätzlich prüft, ob überhaupt ein Captcha-String übermittelt wurde. Dafür bearbeitet man in der Datei typo3conf/ext/ve_guestbook/pi1/class.ve_guestbook_pi1.php die Methode checkForm(). In der Nähe der Zeile 1090 findet man folgendes Stück Code:
if (t3lib_extMgm::isLoaded(\'captcha\') && $this->config[\'captcha\'] == \'captcha\') { session_start(); $captchaStr = $_SESSION[\'tx_captcha_string\']; $_SESSION[\'tx_captcha_string\'] = \'\'; if (!strlen($captchaStr) || $captchaStr != $this->postvars[\'captcha_response\']) { $error .= ...
Die zweite IF-Bedingung sollte man wie hier gezeigt anpassen.
Ich habe das gleiche Problem.
Hoffe es mit Deiner Hilfe nun gelöst zu haben.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\"Was interessiert mich Spam. Ich bin Vegetarier.\"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Grüße aus Karlsruhe
Jochen
Sollte einiges erleichtern, denke ich!
(Danke für einen Tipp.
Rafael)
if ($this->conf[\'captchaFieldname\'] && $verifyCaptcha == 1) {
# get captcha sting
session_start();
$captchaStr = $_SESSION[\'tx_captcha_string\'];
$_SESSION[\'tx_captcha_string\'] = \'\';
if ($captchaStr != $this->get_post[$this->conf[\'captchaFieldname\']]) {
$temp = $GLOBALS[\"TSFE\"]->cObj->getSubpart($this->templateCode_error, \'ERROR_\'.$this->conf[\'captchaFieldname\']);