Honig für Kommentar Spammer
Janek hat mich auf Google+ wieder auf etwas gebracht, was ich schon lange mal testen und implementieren wollte: Einen Honeypot für den Kommentarbereich.
Ein Honeypot (Honigtopf) ist eine ziemlich einfache Methode, um Spambots zu erkennen, die automatisiert Kommentare abgeben wollen. Obwohl diese Methode schon mindestens seit 5 Jahren im Einsatz und beschrieben ist, scheint sie laut meinen Tests immer noch sehr effektiv zu sein.
Funktionsweise
Der Honig für die Bots wird ausgelegt, indem man im Kommentar Formular eine Eingabezeile hinterlegt, die per CSS versteckt wird. Echte Besucher des Blogs, die kommentieren wollen, sehen diese Eingabe also nicht und lassen sie folgerichtig leer. Kommentar Bots haben aber die Eigenschaft, dass sie alle Eingabefelder zu füllen versuchen, um sicher zu stellen, dass der Kommentar nicht durch ein benötigtes aber leeres Feld abgewiesen wird. Eine weitere Eigenschaft ist, dass Bots nur das reine HTML auslesen und somit nicht erkennen können, dass ein Feld gar nicht sichtbar ist (wenn man dies über eine externe CSS Datei macht).
Bots müssen Kommentarfelder sogar analysieren, damit sicher gestellt ist, dass die zu bewerbende URL in der URL Eingabe ist, der Text im Kommentarfeld usw. Somit sollte die Honeypot Eingabe einen sinnvollen Namen und ein Label haben. Mein Honigtopf fragt im Blog scheinbar die Telefonnummer ab und in der Tat füllen die Bots diese Eingabe mit Zahlenkombinationen.
Im Einsatz
Ich habe den Honeypot in mein CommentSpice Plugin eingebaut und zeichne die Resultate im Moment auf. Die Testergebnisse sind äußerst zufrieden stellend: Die Datenbank füllt sich mit Kommentaren, die von CommentSpice als Bot erkannt wurden. Die Fehleranfälligkeit (False Positives) ist technisch bedingt extrem gering, eigentlich kann der Honigtopf nur in erzwungenen Situationen falsch anschlagen.
Der Vorteil des Honigtopfes (im Vergleich zum Bayes z.B.) ist also eine sehr gute Trefferquote ohne dabei die Datenbank benutzen und unter Last legen zu müssen (wenn man das Logging ausschaltet). Ich lasse den Kommentarbereich nun also zuerst von CommentSpice überprüfen, danach vom Bayes und ganz zum Schluss vom normalen Antispam Plugin (das bisher schon nichts zu tun hatte).
Resultat: Im Bayes Papierkorb ist jetzt schon länger nichts mehr zu finden! Die Spam Kommentare, die sich dort bisher sammelten, wurden also bereits vom Honeypot abgefangen. Im Spamlog kann man das auch schön nachvollziehen.
Comments
Display comments as Linear | Threaded
Matthias Mees
on :
Follow @yellowledWie versteckst Du diese Zeile denn genau per CSS? Je nach Methode kann es nämlich sein, dass sie für Screenreader trotzdem „sichtbar“ ist, sprich: vorgelesen wird, was unschön wäre.
Mit { display: none; visibility: hidden; } solltest Du auf der sicheren Seite sein.
Matthias Mees wrote about: Umdekoriert
Grischa
on :
Follow @gbrockhausExakt so verstecke ich die Eingabe.
Ich hatte vorher einen Bericht dazu gelesen, wie Screen Reader auf einen Honeypot reagieren. Da wurde zusätzlich noch empfohlen, autocomplete="off" mitzugeben. Aber dann unterscheidet sich die Eingabe auffällig von den anderen, was das Ergebnis verschlechtern kann. Deshalb habe ich das erst mal draußen.
Wäre interessant, wenn mal jemand mit Screen Reader einen Blick auf meinen Kommentarbereich werfen könnte. Allerdings ist der "placeholder" für das Element auch recht eindeutig für Menschen:
"You don't want to give me your number, do you? ;)"
Grischa wrote about: S9Y Microblogging per Mail auf Uberspace
Janek on :
Schau in den Quellcode. Das ist in der Tat das, was hier verwendet wird.
Meine Überlegung wäre jetzt übrigens, ob es nicht sinnvoll wäre, das in das Bayes-Plugin zu integrieren oder in ein Extra-Plugin auszulagern. Dann könnte man nämlich per Honeypot vorfiltern und dann per Bayes nachprüfen. Das würde dazu führen, dass Bayes nur noch als Feinfilter verwendet wird, entsprechend könnte man dann auch das Abweisen von Kommentaren ausschalten und nur noch die Moderation verwenden. Dadurch würden keine Ham-Kommentare mehr fälschlich als Spam abgewiesen und man hat trotzdem einen Bot-Schutz mit einer Trefferquote von 99% und einem geringen Nervfaktor durch Moderations-Benachrichtigungen.
Der Nachteil des Honeypots ist halt, dass er dann nicht mehr funktioniert, wenn jemand einen Spambot speziell für eine Seite oder eine Software (in diesem Fall Serendipity mit Bulteproof- oder 2k11-Template) schreibt. Dieses Risiko würde durch die Honeypot-Bayes-Mischung auch abgefangen. Wenn es dann noch Möglichkeiten der Variation durch Konfiguration im Backend gäbe wäre es eigentlich perfekt.
Grischa
on :
Follow @gbrockhausNun, der Honeypot ist ja in einem eigenen Plugin, kann somit vor das Bayes geschaltet werden. Hier im Blog ist also bereits das von Dir beschriebene Verhalten: Erst der Pot, was der durchlässt geht dann halt noch mal durch das Bayes.
Ich habe mir auch schon Gedanken dazu gemacht, wie man auf Bots reagieren kann, die explizit auf diese Konfiguration zugeschnitten Seiten kommentieren. Die Styles und Bezeichnungen könnte man mit einer Art Zufallswert setzen, das von Blog zu Blog verschieden wäre (somit nicht am HTML Code zu erkennen). Am besten über ein Dictionary, das "vernünftige" Worte hat.
Die Bezeichnung "Phone", die vermutlich im Moment einiges bringt, wäre dann allerdings weg, aber man könnte den "Typ" auch explizit in der Plugin Konfiguration angeben lassen.
Dirk Deimeke
on :
Follow @ddeimekeWann dürfen wir mit dem Plugin bei Spartacus rechnen?
Grischa
on :
Follow @gbrockhausWenn es ausreichend getestet ist. Im Moment ist es nur bei mir und bei Rowi im Einsatz. Ich bin gespannt auf seinen Bericht.
Ich packe ungern "ungetestetes" nach Spartacus..
Grischa wrote about: Projekt: Serendipity als Microblog
Dirk Deimeke
on :
Follow @ddeimekeIch bin generell auch bereit, zu testen.
Wird der Honeypot bei Comment Spice bleiben oder kommt er in ein eigenes Plugin? Letzteres würde ich bevorzugen.
Grischa
on :
Follow @gbrockhausEigentlich soll er in CommentSpice bleiben. Allerdings kannst Du dort auch alles ausschalten außer eben dem Honeypot.
Dirk Deimeke
on :
Follow @ddeimekeKannst Du darüber bitte noch einmal nachdenken?
Ich habe kein Problem damit, mir Comment Spice zu installieren und zu nutzen. Aber als neuer Nutzer würde ich eine Antispam-Funktionalität nicht in einem "Kommentarbereichsverbesserungsplugin" suchen.
Grischa
on :
Follow @gbrockhausDie Suchbegriffe "AntiSpam" und "Honeypot" erscheinen auch in der Beschreibung. Ich werde dann auch noch die Plugin Kategorie "Anti Spam" hinzu fügen.
Dirk Deimeke
on :
Follow @ddeimekeOder so
onli on :
Klingt ziemlich gut. Was für einen Fokus hat commentspice? Wenn ich das hier richtig sehe und es den Kommentarbereich erweitern soll, könnte das zum livecomment-Plugin passen (das ja inzwischen "Erweiterter Kommentarbereich" heißt).
Die Honeypotfunktion fände ich dann aber auch passender in einem separaten Plugin, dann könntest du das auch sicher recht leicht und schnell veröffentlichen, oder im allgemeinem Spamblock-Plugin, auch wenn das schon sehr viele Optionen hat.
PS: Auch dieser Kommentar wurde mir zuerst als Spam abgewiesen, deshalb füge ich hier noch dieses PS hinzu, in der Hoffnung, dass es die Wertung drückt.
Grischa
on :
Follow @gbrockhausDas ist interessant.. Das ist der einzige Kommentar, den das Bayes heute raus gefiltert hat. Hast Du dafür was eingebaut, dass es Dich erkennt?
Janek on :
Wahrscheinlich liebt dich das Plugin.
Aber aus genau diesem Grund würde ich bei Verwendung von Honeypot + Bayes die Reject-Funktion abschalten und nur die Moderationsschleife verwenden. Wie du sagst, war das der einzige Kommentar, der bisher heute von Bayes rausgefiltert wurde. Die Anzahl der zu moderierenden Kommentare wäre also demnach trotzdem gering.
Grischa
on :
Follow @gbrockhausDas stimmt. Ich habe das Bayes jetzt mal auf Moderation umgeschaltet.
Heute morgen gab es zwar die ersten 3 Botaufrufe, die den Honeypot umgangen haben, allerdings ist das im Verhältnis eine minimale Menge und ich vermute, dass diese die Seite noch in alter Version "im Cache" hatten und deshalb den Honeypot nicht sahen.
Eigentlich ist es ja sogar relativ egal, ob ich Bayes auf Moderation oder Löschen schalte: Ich kann in beiden Fällen den Kommentar restaurieren. Aber moderierte Kommentare kann ich auch mobil wieder frei schalten (über den Wordpress für Android Client). Somit schaue ich jetzt mal, ob sich der Moderationsaufwand zu sehr steigert durch diese Einstellung.
Grischa wrote about: Was tun nach Verlust des Android Geräts?
onli on :
Jop, der Unterschied ist ja nur die Sichtbarkeit des Kommentars, und die Nutzerrückmeldung. Wobei man den Papierkorb natürlich auch ausschalten kann.
PS: Diese Promolink-Dropdown-Box erscheint bei mir zuerst nicht. FF 13.0.1, keine Fehlermeldung. Dann alles nochmal eingegeben, jetzt ist sie da.
onli wrote about: Spamblock-Bayes: Theoretische Grundlagen
Grischa
on :
Follow @gbrockhausDie kommt nur, wenn Du einen Link (Homepage) eingegeben hast. Sie wird erst nachträglich geladen und sichtbar gemacht (eben, wenn der Link eingetragen und sinnvoll ist).
P.S.: Ebenfalls Firefox 13.01 unter Ubuntu bei mir.
Grischa wrote about: NVida Grafik Treiber für Ubuntu 12.04
Dirk Deimeke
on :
Follow @ddeimekeIch habe jetzt die Bayes-Datenbank gelöscht und die Kommentare neu gelernt. Es sieht alles sehr gut aus mit dem Plugin!
Grischa
on :
Follow @gbrockhausDas habe ich jetzt auch mal gemacht. Derzeit habe ich zwar keinen SPAM in der DB, den das Bayes lernen könnte, aber dafür ist die größte meiner DB Tabellen nun wieder schön klein und gut benutzbar.
Außerdem erreicht im Moment (Honeypot + HCaptcha) bei mir sowieso kein SPAM das Bayes. Mal weiter beobachten, wie sich das entwickelt.
Grischa wrote about: Das versteckte Captcha
Grischa on :
Prima! Dann werde ich es heute Abend wohl endlich mal releasen!
Danke für Tests.
Grischa
on :
Follow @gbrockhausInteressante Erkenntnis im Zusammenhang mit dem "Versteckten Captcha": Bots, die den Honeypot mit Zahlen füllen, lassen das Captcha leer (tun es also genau verkehrt herum).
Der Grund muss tatsächlich sein, dass sie die Eingabefelder analysieren. Der Honeypot sieht wie eine Abfrage nach einer Telefonnummer aus, das Captcha wie ein Captcha. Somit versuchen sie es beim Honeypot mit Zahlen und ignorieren das Captcha (weil sie damit nichts anzufangen wissen).
Die Benennung des Honeypots ist also scheinbar wirklich wichtig!