agapanthus: Formmailer von Selfhtml oder Sourceforge

Beitrag lesen

Moin.

Somit nehme ich (fast) alles zurück. Die einzige für mich bleibende Kritik ist, dass nicht abgefragt wird, von welcher Seite aus die Daten übergeben wurden.

Das geht nur per REFFERER, und der ist leicht zu fälschen - was für Spammer mit einem entsprechenden Script kein Problem ist.

Aber das kann - wie bereits erwähnt - im schlimmsten Fall ja nur zur Folge haben, dass man selbst eine Menge Spam bekommt.

Wenn man die Tipps bzgl. hidden fields und Filtern bestimmter Inhalte implementiert, kann das Spamaufkommen gegen null gehen - bis die Spammer sich auch dagegen was einfallen lassen.

Ein paar kleine Erweiterungen des Formmailers, und schon reduziert sich das Spamaufkommen. Mit der Spamerkennung über Schlüsselwörter schließt man u.U. die User aus, die genau diese Wörter so verwenden. Die regulären Ausdrücke lassen sich aber noch verfeinern, so daß das sehr selten wird. Das wollen wir hier aber nicht posten - schließlich sollen es die Spammer nicht soooo leicht haben ;-)

-------> interne Daten aus den erwarteten hidden-Feldern auslesen:

$spamField = $query->param('mailto');  # -------> Name des Feldes zum "Anfüttern" wählen, z.B. mailto

-------> Prüfen ob hidden field zur Spamerkennung leer ist:

if ($spamField ne "") {
   &error;
}

-------> Schlüsselwörter für Spamerkennung (regExp):

$spamKey = 'content-type|mime-version|content-transfer-encoding|subject:|to:|from:|cc:|bcc:';

foreach(@names) {
  $name = $_;
  @values = "";
  @values = $query->param($name);
  if($name ne "return" && $name ne "subject" && $name ne "delimiter" && $name ne "mailto") {
    foreach $value (@values) {
      # -------> Spamerkennung an Hand der Keywords
      if (lc($value) =~ /$spamKey/ ) {
         &error;
      }
      $mailtext = $mailtext.$name;
      $mailtext = $mailtext.$delimiter;
      $mailtext = $mailtext.$value."\n";
    }
  }
}

sub error {
  print $query->header('text/html','404 Not Found');
  print $query->start_html(-title=>'404 Not Found');
  print "<h1>404 Not Found</h1>";
  print $query->end_html;
  exit;
}
Gruß Frank