Rechen-Captcha bei Kommentarfunktion - Updated 22.03.2013 15:37

Ich habe heute in meinem Kommentarformular eine Captchafunktion eingebaut, weil immer mehr SPAM aufgeschlagen ist. Man muss eine simple Rechenaufgabe lösen, damit der Kommentar angenommen wird. Kommentare sind bei mir zwar immer moderiert, deswegen nerven mich die täglichen Notifications über Kommentarspam trotzdem.

Das sollte daher nun vorbei sein.

Viagra, my ass!


Update 21.03.2013 08:36:

Tja, scheint nicht wirklich zu helfen:

- - [21/Mar/2013:07:21:24 +0100] "GET /blog/2012/08/06/85/her-name-2/ HTTP/1.0" 21352 200 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0" "http://www.daemon.de/blog/2012/08/06/85/her-name-2/" - - [21/Mar/2013:07:21:26 +0100] "POST /blog/2012/08/06/85/her-name-2/addcomment/ HTTP/1.0" 17760 200 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0" "http://www.daemon.de/blog/2012/08/06/85/her-name-2/"

War Kommentarspam. Na wunderbar. Ich frage mich, wie der das in 2 Sekunden hingekriegt hat!


Update 21.03.2013 20:17:

So. Nachdem meine erste - primitive Variante - nicht ausreichend war, habe ich jetzt aufgerüstet. Ich bin den ausgezeichneten Ratschlägen von Web ohne Barrieren gefolgt und bin jetzt - denke ich - happy mit der Lösung.

Im Einzelnen habe ich jetzt eine dreistufige Verteidigungslinie gegen SPAMer:

  • Stufe 1: Ein Timing Cookie

    Das funktioniert wie folgt: wenn man ein einzelnes Blogposting aufruft, bekommt man einen Cookie mitgeliefert. Der Cookie beinhaltet den Timestamp des Zeitpunkts wo die URL aufgerufen wurde und eine Signatur aus Timestamp und einem Salt per SHA256.
    Wenn das Kommentarformular gepostet wird, prüft Django eine Reihe von Dingen:

    • Der Cookie muss grundsätzlich vorhanden sein
    • Der Cookie muss den Timestamp UND die Signatur beinhalten
    • Die Signatur muss richtig sein!
    • Der Timestamp darf nicht jünger als 10 Sekunden sein
    Wenn einer dieser Punkte nicht zutrifft, wird die Session throttled. Das bedeutet, dass im Django an der Stelle ein Delay eingebaut ist, der den SPAMer aufhält.

  • Stufe 2: ein Honeypot Formularfeld

    Im wesentlichen handelt es sich einfach um ein weiteres Formularfeld des Kommentarformulars. Dieses ist aber im normalen Browser nicht sichtbar. Dadurch wird es von einem Besucher auch nicht ausgefüllt und in dem Fall ist alles gut.
    Wenn aber ein Bot dieses Feld ausfüllt, dann passieren zweierlei Dinge: zum einen kommt wieder das oben erwähnte Throttling zum Einsatz. Und zum anderen - sollte der SPAMer so geduldig sein - gibt es eine Fehlermeldung, das Formular sei falsch ausgefüllt (freilich ohne Hinweis, dass das Feld LEER sein muss, damit Django happy ist!).

  • Stufe 3: Logikfragen als Captcha

    Das hatte ich im Prinzip auch schon vorher. Nur da waren es noch einfache Rechenaufgaben. Jetzt sind es logische Fragen, die sich durch blindes maschinelles Übersetzen nicht so ohne weiteres beantworten lassen. Einfach mal hier unter diesem Posting die Frage anschauen, dann versteht man, was ich meine. Gerne öfter Reloaden - es gibt einen Pool an Fragen.

In der Summe ist es ziemlich unwahrscheinlich, dass es ein SPAMer nun durch meine Verteidigungslinien schafft, während es für echte Menschen weiter so einfach ist, wie nur irgend möglich. Der einzige Nachteil ist, dass die Fragen derzeit nur auf deutsch vorliegen. Eventuell erweitere ich das noch auf englisch. Dazu müsste ich aber ohnehin eine englische Version der Seite anbieten, was ich sowieso schon länger vorhabe.


Update 22.03.2013 15:37:

Bleibt spannend. Sind natürlich immer noch SPAMer unterwegs, die nun auch nicht mehr durchkommen. Aber nun kriegen die alle einen HTTP 500 Error (d.h. Django stirbt da weg):

- - [22/Mar/2013:04:51:39 +0100] "GET /blog/2011/04/24/2/neu-gemessen/ HTTP/1.1" 18957 200 "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5" "-" - - [22/Mar/2013:04:51:40 +0100] "POST /blog/2011/04/24/2/neu-gemessen/addcomment/ HTTP/1.1" 4719 500 "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5" "http://www.daemon.de/blog/2011/04/24/2/neu-gemessen/"

Und das, obwohl meine ganze Maschinerie mit Exceptions funktioniert, die sollte dann eigenltich auch einen Django-Tod abfangen. Ich hab jetzt mal Error-Mailing aktiviert. Dann krieg ich nen Stacktrace und Environment gemailt, wenn das passiert. Ich bin ja gespannt wie Hulle, was die da eigentlich genau machen.


19.03.2013 17:02 CC0 blog software spam Source

Ähnliche Beiträge:

Null Kommentar zu Rechen-Captcha bei Kommentarfunktion - Updated 22.03.2013 15:37



Kommentieren:
Aus welchem Land kommen Sie?
Land*:
Ihr Kommentar erscheint erst, wenn wir ihn freigegeben haben!
Mit * markierte Felder sind Pflichtfelder.
Sofern Sie eine Emailadresse eingeben, wird diese automatisch nach einem Monat gelöscht.
Weitere Daten werden nicht aufgezeichnet.