Alexander (HH): Spamschutz Gästebuch

Beitrag lesen

Moin Moin!

mein Gästebuch hat ein  Eingabe-Formular mit den Feldern:
textarea->textfeld für die Nachricht

hidden-fields/name=wert:
id='AzHmmxyZ'
ky='023134598'

Wozu zwei verschiedene Werte, und dazu noch so offensichtlich benannt?

mail='webmaster@example.com'

»»

(Mail-Adresse wie im Impressum)

Wozu ein Hidden-Feld mit Deiner(?) Mail-Adresse?

Außerdem wird ein Cookie gesetzt mit dem Value 'QwWEDf5Gtp'.

Falsch formuliert: Du versuchst, einen Cookie zu setzen. Hast Du einen Fallback-Mechanismus oder läßt Du paranoide Surfer einfach gegen die Wand laufen, die keine Cookies akzeptieren?

Bei einem Reload ändern sich die hiddenfelder id und ky sowie der Wert des Cookies.

Na und? Wertest Du die Hidden-Felder und den Cookie aus oder schreibst Du die nur aus Spaß ins Formular?

Beim Absenden mit dem Submit-Button wird zu einer "Danke"-Seite umgeleitet.

Ein Spammer hat vor, das Gästebuch mit obszönen Links u.a. zuzumüllen. Wie würde er vorgehen?

Du möchtest also, dass ich mir mal den schwarzen Hut aufsetze?

  
#!/usr/bin/perl -w  
use strict;  
use WWW::Mechanize;  
my $spam='Buy that blue pills at http://evil.site.tld/';  
my $mail='some.junk@wrong.address.tld';  
for my $loop (1 .. 100) {  
    my $m=WWW::Mechanize->new(agent => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)', cookie_jar => {});  
    $m->get('http://www.example.com/guestbook.cgi');  
    map { $_->value($spam) } $m->find_all_inputs({ type => 'textarea' });  
    map { $_->value($mail) } $m->find_all_inputs({ type => 'text', name_regex => qr/mail/ });  
    $m->submit();  
}  

.. aus dem Kopf und ohne zu testen. Dieses Dutzend Zeilen erwartet, dass Du nur ein Formular auslieferst, mit einer einzigen Textarea für den Text und einem Textfeld, dessen Name "mail" enthält, für die E-Mail-Adresse des Gastes. Dein Cookie wird brav zurückgeliefert, ebenso Deine Hidden-Felder.

Suche eines passenden Formulars in einer Seite mit mehreren Formularen ist leicht nachzurüsten, ebenso z.B. ein Klick auf einen bestimmten Submit-Button mit oder ohne Image.

Prüfst Du die Zeit zwischen dem GET und dem dazugehörigen submit (POST), baue ich ein sleep(10*random()) ein.

Rüstest Du Javascript oder Captchas nach, sperrst Du weitere Benutzer aus.

Je nach dem, wie stark ich motiviert bin, rüste ich einfach die Funktion des Javascript in meinem Code nach, oder ich lasse einfach eine Javascript-Engine in Perl laufen, ggf. mit einem Timeout gegen Trödeleien in Deinem JS-Code. Gegen Captchas hilft gut raten, Algorithmus knacken (MS Live und Google sind geknackt), oder schlicht Schwanzsteuerung.

Oder ich outsource das ganze Spammen nach Indien oder China und lasse dort Billigst-Arbeiter für ein paar Cent vorbereitete Texte abtippen oder reinkopieren. Das hilft auch gegen Captchas, Javascript und alle anderen Tricks, mit denen Du versuchst, Menschen von Maschinen zu unterscheiden. Gegen eine Abfrage der Remote-IP-Adresse helfen Anonymisierungsnetzwerke oder ganz einfach offene Proxies.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".