AntiSpam: Erkennung von Spam
joe
- programmiertechnik
0 Sven Rautenberg0 wucher wichtel0 KingLully0 joe0 T.Rex
Hi,
ich soll auf einer Seite eines Bekannten einen Spam-Schutz einbauen.
Der hat pro Tag mehrere tausend GB-einträge und User bekommen.
Zuerst versuchte ich es mit einem PostKey:
1. Ich lege für jede IP einen Eintrag in einer 'IP-table' an
2. Bei jeder Anfrage wird eine neuer PostKey
generiert (32 Zeichen)[a-zA-Z0-9]
3. Bei einer POST-Request muss der PostKey angegeben sein und mit dem in der DB für diese IP-gespeicherten übereinstimmen. Wenn nicht wird die POST-Anfrage erbarmungslos gelöscht. unset($_POST);
Brutal, aber wirksam, doch wenn man jetzt zuerst eine GET-Request macht den PostKey rausliest und denn mitschickt gehts wieder, aber eben nicht mehr ganz so schnell. Der Spam hat um rund 15% abgenommen.
Gut, ein Captcha?
Nun ja ein Captcha wäre mit Sicherheit eine Lösung. Bestimmte Bereiche habe ich damit auch schon abgesichert.
Aber da gibt es leider ein Problem, ja sonst hätte ich mir diesen Thread sparen können. Die Captcha Bereiche wurden nur noch mit < 50 Spameinträgen vollgemüllt :).
Wollten wahrscheinlich das Captcha testen.
Mein Bekannter hat 2 Bereich die von Programmen/Maschinen mit Infos gefüttert werden. Ja Spam-Bots sind auch Programme/Skripte.
Der Postkey ist kein Problem da diese eh erst eine GET-Anfrage starten Infos von der Seite holen, diese verarbeiten und dem Server per POST eine Antwort senden.
Also ein Captcha scheidet wohl aus. Wenn die den auswerten könnten wären die Programmierer bei denen Halbgötter oder ich ein Idiot ;-)
Gibt es eine Möglichkeit in einer MySQL Tabelle im Nachhinein zu sagen, jawohl die Einträge id > 50 && id < 200 ist Spam also weg damit?
Wie kann ich wirksam Spam erkennen? An der IP? Die haben Einwahl-IP und pro Tag sind es mindestens 2 verschiedene. Das höchste waren 17 verschieden Spam-IPs am Tag.
Die die POSTen dürfen haben auch nicht unbedingt eine Statische IP, leider.
Also was ich brauche is PHP-Code der SPAM im nachhinein in einer MySQL tabelle erkennt und löscht.
Es würde auch eine Lösung gehen die während dem Spammen feststellt, nein du Spammst du schickst mir keine gültige POST-Request mehr? Aber dies ist viel umständlicher?!
joe
PS: die Adresse darf/will ich aus bestimmten Gründen hier nicht nennen ich hoffe das dies auch nicht erforderlich ist.
Moin!
Also was ich brauche is PHP-Code der SPAM im nachhinein in einer MySQL tabelle erkennt und löscht.
Im Nachhinein, oder vor dem Eintragen - egal.
Es gibt diverse Methoden der Spamerkennung, die alle irgendwie inhaltsbasiert arbeiten, also anhand der geschriebenen Texte feststellen wollen, ob es sich um Spam handelt, oder nicht. So eine Methode sollte frühestmöglich greifen und den Datenbankeintrag schon von vorne herein verhindern.
Und für den Fall, dass statistische Methoden verwendet werden, wäre es sicher nicht verkehrt, falsch erkannte Einträge nachträglich zu löschen und dem Lernprozess der Filtermethode zuzuführen.
Es gibt diverse schon fertige Module, die man einsetzen kann - oder natürlich Eigenbau. Zum Eigenbau gibts z.B. diesen Artikel: http://aktuell.de.selfhtml.org/artikel/programmiertechnik/bayes-filter/index.htm
Ansonsten gibts halt schon fertige Spamfiltermodule wie zum Beispiel http://spambayes.sourceforge.net/.
- Sven Rautenberg
Also das ist jetzt ein wenig OffTopic.
Kann man Spammer anzeigen. z.B. die Logdateien der Polizei als Beweismittel geben.
Also kann man irgendwie gegen Spammer vorgehen?
Hallo!
Also kann man irgendwie gegen Spammer vorgehen?
Theoretisch ja, aber praktisch nein. Ich glaube nicht, dass die so blöd sind und sich anhand einer IP-Adresse fangen lassen :-) Außerdem was machst du, wenn die in Tuvalu hocken?
ciao, ww
Hallo!
Also kann man irgendwie gegen Spammer vorgehen?
Theoretisch ja, aber praktisch nein. Ich glaube nicht, dass die so blöd sind und sich anhand einer IP-Adresse fangen lassen :-) Außerdem was machst du, wenn die in Tuvalu hocken?
ciao, ww
Nehmen wir mal an:
Ich gebe der Polizei die IP-Adressen und sage die sollen die Spammer in U-Haft stecken.
Moin!
Also das ist jetzt ein wenig OffTopic.
Kann man Spammer anzeigen. z.B. die Logdateien der Polizei als Beweismittel geben.
Also kann man irgendwie gegen Spammer vorgehen?
Es gibt diverse Gerichtsverfahren, sowohl in den USA, als auch in Deutschland, gegen Spammer, die letztendlich alle recht zufriedenstellend für den Kläger abgeschlossen wurden.
Eine entsprechende Google- oder auch Heiseticker-Recherche sollte dir da weiteres Material liefern.
Allerdings ist das Problem, dass Spammer dir meist nicht den Gefallen tun, leicht erkennbar zu sein, und im gleichen Land wie du zu sitzen. Das macht die Verfolgung und insbesondere die beweiskräftige Verursacherermittlung schwierig.
- Sven Rautenberg
Also das ist jetzt ein wenig OffTopic.
Kann man Spammer anzeigen. z.B. die Logdateien der Polizei als Beweismittel geben.
Also kann man irgendwie gegen Spammer vorgehen?
Wichtiger wäre die Frage, ob man geloggte SpamBots Aktivität an eine spezielle Forensische Organisation schicken kann, die das für ihre eigenen Anti-Spam Bemühungen gebrauchen kann.
Ich denke, dass die Information an ISPs, ihr Server sei eventuell als Spam-Relay missbraucht, für diese schon mal gut ist. Organisationen sind aber besser eingerichtet, die betroffenen Server zu recherchieren und die ISPs anzusprechen.
Hallo Forum,
Es gibt diverse schon fertige Module, die man einsetzen kann - oder natürlich Eigenbau. Zum Eigenbau gibts z.B. diesen Artikel: http://aktuell.de.selfhtml.org/artikel/programmiertechnik/bayes-filter/index.htm
Der Artikel bringt eine Implementierung in PHP gleich mit.
Ansonsten gibts halt schon fertige Spamfiltermodule wie zum Beispiel http://spambayes.sourceforge.net/.
Danke, das kannte ich noch nicht, das muss ich mir mal genauer anschauen.
Gruß
Alexander Brock
Hallo!
Also ich mache es so: Ich habe eine DB-Tabelle. In dieser werden die IP-Adressen, der Eintragenden gespeichert. Jede IP-Adresse, die älter als 5 Minuten ist, wird gelöscht. Solange die IP-Adresse in der Tabelle ist, darf nicht eingetragen werden. Das verhindert massenhaftes Eintragen.
Um zu verhindern, dass ein Spambot auch nur einen Eintrag machen kann, durchsuche ich den Eintrag nach bestimmten Wörtern. So bspw. '<a>', '[link', '[url', 'Viagra' und alles mögliche ;-) Sobald eines dieser Wörter auftritt, wird der Eintrag nicht eingetragen, mit dem Hinweis, dass etwas nicht stimmt und der Möglichkeit es zu verbessern. Habe das ganze noch nicht getestet, aber ich stelle es mir äußerst wirksam vor :-D
ciao, ww
Also ich mache es so: Ich habe eine DB-Tabelle. In dieser werden die IP-Adressen, der Eintragenden gespeichert. Jede IP-Adresse, die älter als 5 Minuten ist, wird gelöscht. Solange die IP-Adresse in der Tabelle ist, darf nicht eingetragen werden. Das verhindert massenhaftes Eintragen.
Duerfen Wir das hier kritisch anmerken? Eine laue "Loesung".
Hallo!
Duerfen Wir das hier kritisch anmerken? Eine laue "Loesung".
Gerne. Könntest du mir dann aber vielleicht auch sagen, was daran lau ist?
Außerdem ist das nur die Idee eines kleinen, unbedeutenden Jungen, der meint er könne sich mit den Großen der Spamwelt anlegen ;-)
ciao, ww
Gerne. Könntest du mir dann aber vielleicht auch sagen, was daran lau ist?
Noe, mach ich nich, ich geh jetzt baden, das Wasser laeuft sonst in vielleicht fuenf Minuten ueber. LOL
"Der Kanzler badet gerne lau."
Hallo!
Gerne. Könntest du mir dann aber vielleicht auch sagen, was daran lau ist?
Noe, mach ich nich, ich geh jetzt baden, das Wasser laeuft sonst in vielleicht fuenf Minuten ueber. LOL
Stimmt, blöde Frage. Sorry. Irgendwie sollte ich mich solangsam an deine "Ich-diskutier-zwar,-aber-Gründe-brauche-ich-dafür-nicht"-Art gewöhnen :-P
ciao, w*SCNR*w
Gerne. Könntest du mir dann aber vielleicht auch sagen, was daran lau ist?
Noe, mach ich nich, ich geh jetzt baden, das Wasser laeuft sonst in vielleicht fuenf Minuten ueber. LOL
Stimmt, blöde Frage. Sorry. Irgendwie sollte ich mich solangsam an deine "Ich-diskutier-zwar,-aber-Gründe-brauche-ich-dafür-nicht"-Art gewöhnen :-P
Das ist die gute alte Meta-Ebene bzw. Meta-Meta-Ebene. Sowas lernt man nicht in der Schule.
Dieses elende in der Schule uebliche Abwaegen, diese Pros änd Cons Listen, diese frueh verhaermten Lehrergesichter. Brauch man alles nicht, laessig gehts auch.
Ueber die SPAM-Behandlung gehaltener Daten hat Sven schon einiges geschrieben, ansonsten ist die Behandlung von Bots von Interesse.
Da ist viel im hiesigen Archiv zu finden, das Thema so zu sagen ein Dauerbrenner.
FormID-Management, Bestimmte Form-Werte pruefen, Bearbeitungszeit der Form messen, Captchas, also alles was den Bot ungluecklich macht, kommt in Frage.
Wow, das soviele Antworten hätte ich nicht gedacht.
Vielen Dank schon mal an euch!
Also da sind einige gute Tipps dabei vorallem das mit dem Bayesscher Spamfilter.
Wenn man nach dessen Ansatz vorgeht, den ein wenig modifiziert und in Verbindung mit anderen Hindernissen einsetzt dürfte das für die Spamfreunde zumindest ein heftiger Rückschlag sein. Wenn sie nicht sogar kapitulieren, was das beste wäre, aber dann wäre die ganze Arbeit umsonst gewesen wenn sie dann keinen Nutzen mehr hat ;)
joe
Moin,
mein Verfahren:
Beim Aufruf des GB (zum Lesen) wird ein Key generiert und dieser sowohl auf dem Server als auch im Prowser abgelegt (Cookie oder Hiddenfield).
Bei einem POST wird geprüft, ob mind. 10 sec seit dem Lesen vergangen sind.
Damit schaltest Du zumindest die SPAMBots aus, die posten nämlich gleich. Und der Besucher braucht keine Brille für ein Captcha.
--T.Rex
Moin!
Bei einem POST wird geprüft, ob mind. 10 sec seit dem Lesen vergangen sind.
Damit schaltest Du zumindest die SPAMBots aus, die posten nämlich gleich. Und der Besucher braucht keine Brille für ein Captcha.
Vielleicht noch. Ist aber keine Bedingung, um einen Bot zu erkennen. Macht ja auch kaum einen Unterschied, ob ich eine Seite abrufe und sofort poste, oder ob ich eine Warteschlange von Seiten habe, damit Zeit vergeht, und erst dann poste. Speicher dafür haben die heutigen Rechner alle mehr als genug.
- Sven Rautenberg
Moin,
mein Verfahren:
Beim Aufruf des GB (zum Lesen) wird ein Key generiert und dieser sowohl auf dem Server als auch im Prowser abgelegt (Cookie oder Hiddenfield).
Das ist dasselbe wie der PostKey den joe beschrieben hat nur das dieser bei _jedem_ Laden der Seite neue generiert wird.
Bei einem POST wird geprüft, ob mind. 10 sec seit dem Lesen vergangen sind.
Das wäre eine mögliche Erweiterung.
mein Verfahren:
Beim Aufruf des GB (zum Lesen) wird ein Key generiert und dieser sowohl auf dem Server als auch im Prowser abgelegt (Cookie oder Hiddenfield).Bei einem POST wird geprüft, ob mind. 10 sec seit dem Lesen vergangen sind.
Finde ich gut, zielt auch in die richtige Richtung, also dem Benutzer etwas abverlangen, was der Bot nicht kann oder will.
Recht erfolgreich sind auch bestimmte Pflichtfelder wie E-Mailaddressen, die der Bot oft nicht valide fuellt. Oder wenn Du einen Dialog hast, der eine Formbestaetigung erfordert.
moin,
Recht erfolgreich sind auch bestimmte Pflichtfelder wie E-Mailaddressen, die der Bot oft nicht valide fuellt. Oder wenn Du einen Dialog hast, der eine Formbestaetigung erfordert.
Finde ich nicht gut für ein GB, ein Gästebuch sollte max. zwei Felder haben, eines für den Namen und eins für den Text.
Und ein POST sollte technisch nur dann möglich sein, wenn es vorher auch gelesen wurde. I.d.R. "weiß" das ein BOT nicht. Ein menschlicher Besucher hingegen macht das.
T.Rex
Finde ich nicht gut für ein GB, ein Gästebuch sollte max. zwei Felder haben, eines für den Namen und eins für den Text.
Bei bspw. Kommentaren zu Blog-Eintraegen sieht das aber anders aus.
Und ein POST sollte technisch nur dann möglich sein, wenn es vorher auch gelesen wurde. I.d.R. "weiß" das ein BOT nicht. Ein menschlicher Besucher hingegen macht das.
Ein POST ist "technisch" immer moeglich.
Hallo!
Und ein POST sollte technisch nur dann möglich sein, wenn es vorher auch gelesen wurde. I.d.R. "weiß" das ein BOT nicht. Ein menschlicher Besucher hingegen macht das.
Du meinst, dass Bots das Formular nicht vor jedem POST erst per GET abholen und einlesen? Ich reiße nur ungern dein Weltbild ein, aber unserereins darf sich inzwischen durchaus schon mit solchen Biestern rumschlagen...
Grüße, Skrilax