{"id":426,"date":"2007-07-02T08:30:58","date_gmt":"2007-07-02T06:30:58","guid":{"rendered":"http:\/\/my.stargazer.at\/2007\/07\/02\/no-more-comment-spam\/"},"modified":"2007-07-02T08:31:51","modified_gmt":"2007-07-02T06:31:51","slug":"no-more-comment-spam","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2007\/07\/02\/no-more-comment-spam\/","title":{"rendered":"Kein Comment Spam mehr"},"content":{"rendered":"<p>Ein Traum am Blog wird Wirklichkeit &#8211; Ich bin noch immer Spamfrei. Selbst die Akismet-Queue ist seit meinem Eingriff leer! F\u00fcr alle Anderen, die das Problem noch in den Griff zu bekommen versuchen, hier eine kleine Anleitung, welche hier zum Sieg verholfen hat:<\/p>\n<p>Wer hier eine Anleitung nach  1,2,3 erwartet, liegt bei diesem Thema falsch, da der erste Schritt immer aus der Beobachtung der Lage besteht, da Spam &#8211; so seltsam es auch klingt &#8211; lokale Unterschiede birgt. Meine Anleitung hier bezieht sich nicht nur auf WordPress, sondern sollte auch ohne Probleme auf andere Systeme angewendet werden k\u00f6nnen;<\/p>\n<p><\/p>\n<p><!--more-->Spam ist eine Breitband-Plage, welche meist von Botnetzen abgesetzt wird. Um auf m\u00f6glichen Systemen &#8218;gute&#8216; Chancen zu haben, werden alle Formularfelder, die nur irgendwie erreicht werden k\u00f6nnen und der Referer bef\u00fcllt. Mit diesem Weg umgeht der Spammer das Problem der Pflichtfelder.<\/p>\n<p>Ein guter Ansatz ist zum Beispiel ein Feld durch CSS zu verstecken und es als leeres Feld zu deklarieren. In den meisten F\u00e4llen wird auch dieses Feld mit Schrott gef\u00fcllt sein, was f\u00fcr den Kommentar die rote Karte bedeutet. Von der Verwendung von JavaScript rate ich aus folgenden Gr\u00fcnden ab: JavaScript wird am Client ausgef\u00fchrt &#8211; wir wissen somit nicht, was da wirklich l\u00e4uft und ob es abgearbeitet wird. Ein Weiterer Grund ist, dass manche Spambots auch schon JavaScript interpretieren k\u00f6nnen.<\/p>\n<p>Sehen wir uns die Breitbandbehandlungen von Spammern doch genauer an: Die Freitexte enthalten oftmals BBCode, um bei Foren zu punkten. Wer also nicht [link] oder [b] auf seiner Website interpr\u00e4tiert, kann bedenkenlos filtern. In PHP kann der Ansatz folgendermassen aussehen:<\/p>\n<blockquote><p>if (preg_match(&#8218;|\\[url(\\=.*?)?\\]|is&#8216;, $comment)) die(&#8218;BBCode is not interpreted here.&#8216;);<\/p><\/blockquote>\n<p>Anstelle von die() kann man auch jede andere Funktion aufrufen, welche mit dem Spam kurzen Prozess macht. Bei BBCode macht es Sinn, eine Meldung auszugeben, da es manche Leute gibt, die die kleinen Anweisungen neben Formularfeldern nicht lesen k\u00f6nnen.<\/p>\n<p>Ein weiteres Kennzeichen von Spam k\u00f6nnen diverse Worte sein, welche zur Zeit &#8218;in Mode&#8216; sind. Dazu z\u00e4hlen Dauerbrenner wie &#8218;casino&#8216; oder &#8218;viagra&#8216; genauso wie diverse Aktien. Ein Filter auf diesen Worten ist nicht immer sinnvoll, da er sehr schnell umgangen werden kann. Trotzdem kann man damit einige Gl\u00fcckstreffer landen.<\/p>\n<p>Comment Spam hat verdammt viele Links. Ich habe kaum Spam-Kommentare gesehen, welche nicht mindestens 10 Links im Nachrichtentext durch die Welt schreien. Die Anzahl der Links in einem Text ist leicht zu z\u00e4hlen, wenn wir von HTML Links ausgehen. Ich z\u00e4hle alles was href und http(s) hat, als Link. In PHP k\u00f6nnte ein Ansatz so aussehen:<\/p>\n<blockquote><p>$linkCount = preg_match_all(&#8222;|(href\\t*?=\\t*?[&#8218;\\&#8220;]?)?(https?:)?\/\/|i&#8220;, $comment, $out);<\/p><\/blockquote>\n<p>Ab einer gewissen Anzahl von Links, lasse ich auch hier den Kommentar im Datennirvana verschwinden. Eine entsprechende Nachricht an den Autor des Kommentars ist auch in diesem Falle nicht verkehrt, da ja Bots diese nicht auswerten und menschliche Schreiber reagieren k\u00f6nnen.<\/p>\n<p>Trackbacks als Kommunikation zwischen Blogs werden auch gerne missbraucht. Sie lassen sich eher schwierig \u00fcberpr\u00fcfen. Mein Ansatz geht in die Richtung, die entsprechende Webseite einmal automatisch anzusurfen um zu sehen, ob diese auch meine Adresse irgendwo im Quelltext verlinkt hat. Ist dies nicht der Fall, gibt es auch keinen Eintrag.<\/p>\n<p>Diese Ans\u00e4tze lassen sich im Falle von WordPress sehr gut in Plugins verpacken. Manche davon sind schon von anderen Autoren geschrieben worden, andere habe ich hier realisiert und helfen hier schon recht gut. Modifikationen an CMS Systemen vermeide ich grunds\u00e4tzlich, da sie bei jedem Update nachgezogen werden m\u00fcssen und oftmals in Vergessenheit geraten k\u00f6nnen.<\/p>","protected":false},"excerpt":{"rendered":"<p>Ein Traum am Blog wird Wirklichkeit &#8211; Ich bin noch immer Spamfrei. Selbst die Akismet-Queue ist seit meinem Eingriff leer! F\u00fcr alle Anderen, die das Problem noch in den Griff zu bekommen versuchen, hier eine kleine Anleitung, welche hier zum Sieg verholfen hat: Wer hier eine Anleitung nach 1,2,3 erwartet, liegt bei diesem Thema falsch, da der erste [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-426","post","type-post","status-publish","format-standard","hentry","category-it-related-stuff"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/426","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=426"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/426\/revisions"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}