Blog
tags: news software deutsch opensource webdesign howto
Permalink: https://musicchris.de/blog?id=17&langopt=english
20.Oct.2014 15:53 - last update: 27.Sep.2015 23:35
Simpelster Spam Schutz durch tiefenpsychologische Botabwehr - Alternative für Captchas: Honeypots
Ich bin nicht der Urheber dieser genialen Idee, ich kann leider den entsprechenden Blogeintrag nicht mehr wiederfinden in den Tiefen des Netzes. Gebt mir gerne einen Kommentar mit dem Link, dann werde ich ihn einfügen!
Wie wir alle wissen, ist die Intelligenz eines jeden Bots in etwa gegen Null. Man kann das wahrscheinlich auf folgende Logik begrenzen:
Gibt es ein Eingabefeld für Text (<textarea>)?
Ja -> vollspammen! Nein -> Pech gehabt.
Gibt es ein Eingabefeld für email?
Ja -> vollspammen! Nein -> Pech gehabt.
Das kann man sich nun sehr gut zunutze machen, ohne irgendwelche Captchas und solcherlei Kinkerlitzchen. Das geht z.Bsp. wie folgt:
Wir gehen davon aus, daß keine Emailadresse erhoben werden MUSS. Im Sinne der Datensparsamkeit ist dies für übliche Kommentare in z.Bsp. Blogs absolut überflüssig.
Wir nehmen ein typisches Eingabeformular mit den Feldern Name, Website und Kommentar. Das sieht dann so aus:
<form action="comment.php">
<input type="text" name="name">
<input type="text" name="website">
<textarea name="comment"></textarea>
<input type="submit" value="submit">
</form>
Nichts besonderes soweit! Die Idee, auf der das Ganze beruht, macht sich die dumme Eigenschaft der Bots zugute: Kein Spambot kann der Versuchung widerstehen, in ein existierendes Email-Feld etwas hineinzuschreiben! Wenn wir also folgende Zeile in unser Formular einfügen, und das vor dem User verstecken, dann braucht man nur noch im auswertenden Skript (in unserem Falle comment.php), die Anweisung abzusetzen, falls das email-Feld nicht leer ist, bearbeite diesen Post als Spam!Im Klartext bedeutet das, daß wir innerhalb des Formular-Blocks folgende Zeile einfügen:
Genau das wäre dann der "Honigtopf".
<input type="text" name="email" style="display: none;">
Unser Formularblock sollte am Ende in etwa so aussehen:
<form action="comment.php">
<input type="text" name="name">
<input type="text" name="website">
<input type="text" name="email" style="display: none;">
<textarea name="comment"></textarea>
<input type="submit" value="submit">
</form>
Von nun an kann man bequem im php oder wie auch immer man diesen Post auswertet, solche Posts getrost als Spam ansehen. In meinem Blog bekomme ich eine email, mit dem Inhalt des Posts, für den unwahrscheinlichen Fall, daß sich jemand den Blog mit Lynx ansieht, dort wird das Feld nämlich trotzdem angezeigt. In diesem Falle kann ich selbst den Kommentar händisch nachtragen...Anschauen kann man sich das Ganze hier ganz unten! Mein Kommentarfeld funktioniert nach eben diesem Prinzip.
Ich hoffe, daß das hier dem einen oder anderen Admin einen Haufen Zeit erspart, so wie es mir jede Menge Zeit erspart hat. Komisch, daß ich den Blog nicht wieder finde... Allerdings tu ich mich auch schwer mit den Suchmaschinen - die spucken bei mir immer jede Menge Unfug aus, nach dem ich gar nicht suche... :-/ Aber das ist wohl ein anderes Thema...
comments
1) Sebastian
21.Oct.2014 08:23
2) chris_blues
21.Oct.2014 12:14
Danke für das Stichwort und den Link! Da finden sich ja auch noch interessante Kommentare. Als Beweis fürs Konzept haben sich so schon zuverlässig einige Bots verraten. Auch wenn display: none; direkt im Feld steht. So genau scheinen die Bots nicht hinzusehen. Aber das display: none; in eine externe CSS zu legen macht durchaus Sinn. Ich werd auch gleich mal noch den Hinweis hinzufügen, dieses Feld nicht auszufüllen. Falls mal jemand kommen sollte, der sich das Ganze vorlesen läßt. Ich weiß nun nicht so genau, wie das funktioniert, mit den Readern, aber um die Gefahr zu minimieren, finde ich das sehr sinnvoll...
Und... es soll ja doch auch noch Leute geben, die Lynx nutzen. :)
3) Martin
22.Oct.2014 18:00
Diverse WordPress-Plugins nutzen die von dir beschriebene Technik und trotzdem ist das nicht wirklich effektiv zur Abwehr von Spam [citation needed]. Natürlich sind "Bots" in der Lage, CSS zu evaluieren. Bots können sogar JavaScript evaluieren. Die meisten tun es allerdings nicht und es ist viel lohnender (meiner Meinung nach), einen spezifischen Bot für ein bestimmtes Kommentarsystem zu schreiben als einen generischen "FILL IN ALL THE FIELDS" Bot zu nutzen.
Der Grund, warum Du kein Spam bekommst ist schlicht, dass Du eine eigene, unbekannte Software verwendest. Gleiches gilt übrigens für mein Kommentarsystem "Isso", dass ebenfalls seit über einem Jahr spamfrei ist. Nicht weil es besonders viel wert auf Spamabwehr legt, sondern weil es einfach keine (oder nur sehr, sehr wenige) Bots gibt, die JS/HTML/CSS evaluieren.
Das wird vermutlich nicht immer so bleiben.
4) chris_blues
23.Oct.2014 13:33
Das vermute ich leider auch, daß irgendwann die Bots fähiger werden. Dann müssen natürlich andere Maßnahmen her. Aber solang es funzt, kommt mir das sehr gelegen. :)
------------------------
Wecke nicht den Wolf! Seit ich diesen Artikel veröffentlicht habe, bekam ich das erste Mal verstärkt Spams, die sich allerdings bis jetzt alle selbst verraten haben. Immer nur auf diesen Artikel hier und Tendenz steigend. Am ersten Tag waren es noch 3 Versuche, nun (3 Tage später) kommen sie schon jede Stunde! Da ich ja die .htaccess Blacklist von http://perishablepress.com/ nutze, werde ich nun die zum Spam dazugehörigen IPs auswerten. Mal sehen, ob sich da ein Muster findet, so daß ich die IPs direkt blockieren könnte.
Spannend!
5) chris_blues
24.Oct.2014 21:11
https://musicchris.de/blog/checkips.php
post a comment
privacy declaration
Your IP-address, useragent-string etc are not stored by this blog-software. Still, it is possible that the hoster of this website may store data like this. But that is beyond the scope of this blog-software. Check out this website's privacy declaration to find out more about that!
This blog-software generally doesn't store any information about you. Only if you post a comment, some data will have to be stored. You don't have to input any personal information here. Except for the comment itself, all fields are optional!
If you don't want to tells us your name, that's fine. It will be shown as 'anonymous'.
If you want to receive notifications on following comments, naturally you'll have to give us your email address. It will be stored and not be shared with anybody. If you don't want to be notified, just leave the notifications field empty.
If you want your name to be linked to your website, you'll have to give us your site's address. Otherwise leave this field empty.
This data will be stored in case you decide to post a comment here: