Idee zur Vermeidung von Spam
Ben
- meinung
Hallo Ihrs!
Nachdem auf meiner kleinen Website nach etwas über einem Jahr das erste Mal Spam über das Kontaktformular auftrat, war mir klar, dass ich etwas dagegen tun müsse. Doch bevor ich mit dem Lösen von Rechenaufgaben oder gar Captchas anfing, wollte ich das Problem lieber bei der Wurzel packen.
Die beiden Spammails, die mich erreichten, waren aufgebaut wie die häufig in Gästebuchern anzutreffenden, nervigen Beiträge: '<a href="http://www.adresse.com">www.adresse.com</a> www.adresse.com ...' und das ganze ca. 20 Mal hintereinander. Also blocke ich über mein Formular nun schlichtweg jegliche Einträge, welche "<a [beliebiger Text]>" und "</a>" enthalten.
Der Nutzer wird selbstverständlich darauf hingewiesen und kann seinen Beitrag ändern und dann wie gewohnt abschicken, da sein Text im Eingabefeld erhalten bleibt. Eine Maschine könnte jetzt zwar theoretisch auch noch einen beliebigen Text posten, solange dieser keine Links erhält. Doch liegt der fragliche Sinn der Massenpostings doch bekanntlich darin, u.a. aufgrund der vielen Backlinks einen möglichst hohen Pagerank zu erhalten - dieses wäre hiermit unterbunden.
Was haltet Ihr davon, und wo liegen die Schwachstellen der Idee?
Beste Grüße,
Ben
P.S.: Um sicherzugehen, sollten evtl. auch noch andere Tags wie "<img ...", "<object..." usw. ausgeschlossen werden.
echo $begrüßung;
P.S.: Um sicherzugehen, sollten evtl. auch noch andere Tags wie "<img ...", "<object..." usw. ausgeschlossen werden.
Du solltest generell Nutzereingaben HTML-gerecht maskieren. (PHP bietet dafür die Funktion htmlspecialchars() an, andere Scriptsprachen haben ähnliche Funktionen.) Dann landen eingegebene Tags als Text auf der Seite und nicht als vom Browser ausgeführter HTML-Code. Das sieht zwar auch nicht gerade hübsch aus, jedenfalls in der Zeit zwischen der Eintragung bis zu deiner Löschung, aber dann kann dir wenigstens darüber keiner auf dem Weg ein XSS unterschieben.
echo "$verabschiedung $name";
Du solltest generell Nutzereingaben HTML-gerecht maskieren.
Hallo!
Nutzereingaben werden bei mir generell HTML-gerecht ausgegeben, getestet werden kann dies z.B. anhand eines Kommentares.
Allerdings handelt es sich bei dem genannten Formular um eine Kontaktmöglichkeit, d.h. die Eingaben landen bei mir als E-Mail. Da ist es relativ egal wie die Daten ankommen, nur möchte ich Spam v.a. daher vermeiden, da der Nutzer eine Bestätigungsmail erhält und wenn ich diese nun auch an jeden Spamversender schicke, dann werde ich nicht lange Freude an meiner Mailadresse haben.
Viele Grüße,
Ben
echo $begrüßung;
Allerdings handelt es sich bei dem genannten Formular um eine Kontaktmöglichkeit, d.h. die Eingaben landen bei mir als E-Mail. Da ist es relativ egal wie die Daten ankommen, nur möchte ich Spam v.a. daher vermeiden, da der Nutzer eine Bestätigungsmail erhält und wenn ich diese nun auch an jeden Spamversender schicke, dann werde ich nicht lange Freude an meiner Mailadresse haben.
OK. Was ist aber mit denen, die von dir eine "Bestätigungsmail" bekommen, deren Adresse der Spammer in dein Kontaktformular eingetragen hat?
echo "$verabschiedung $name";
OK. Was ist aber mit denen, die von dir eine "Bestätigungsmail" bekommen, deren Adresse der Spammer in dein Kontaktformular eingetragen hat?
Der Ansatz ist natürlich richtig. Bisher hat sich jedoch noch niemand die Mühe gemacht mich manuell zuzuspammen und der automatische Bot-Spam bleibt aufgrund des Ausschließens gewisser HTML-Tags (s. Ausgangsposting) derzeit glücklicherweise auch außen vor.
Sollte ich erneut Spammails über mein Kontaktformular erhalten, welche sich nicht beheben lassen, so sehe ich derzeit leider keine andere Möglichkeit als die Bestätigungsmail dann wieder herauszunehmen.
Beste Grüße,
Ben
Hellihello Ben,
ist es nicht viel einfacher, ein Feld mit einer simplen Frage dort anzugeben, wie: wie heißt die Kanzerlin der BRD, oder was macht sie mit ihren alten Klamotten [anziehen]?
Das sind doch Bots, die dich da Vollspammen, die kennen doch die Antwort nicht.
Gruß,
frankx
Das sind doch Bots, die dich da Vollspammen, die kennen doch die Antwort nicht.
Richtig und Bots neigen dazu _alle_ Formular-Felder auszufüllen. Wenn du also irgendwo ein verstecktes (1 Pixel großes) <input>-Text hast, dann wird ein Bot es in der Regel ausfüllen. Und wenn da 'was d'rin steht, dann trägst du den Beitrag einfach nicht ein.
HTML-maskieren sollte man natürlich auch grundsätzlich (wie in Postungs unten erwähnt). Benutze stattdessen BBcode oder eine ähnlich Variante (oder gar nichts).
Ebenso effektiv ist eine <select>-Box mit einigen Auswahlmöglichkeiten und oben drüber steht, welches die richtige ist. Ich habe aber auch schon gehört, dass Bots das einfach so überwunden haben, indem sie jede Möglichkeit einman ausgewählt haben und abgesendet, dann hilft nur noch eine IP-Sperre.
Grundsätzlich gilt: Alles was der Benutzer nicht bemerkt und die Funktionalität nicht beeinflusst sollte gemacht werden, stellt den Spam-Bots ein paar Steine in den Weg, wenn sie über den ersten nicht stolpern, dann wahrscheinlich über den zwölften.