Hilfe, Robot spamt mein Kontaktformular

Achte darauf, das dein Formular nicht zu Versand von Spam verwendet wird.
 
Genau das gleiche Problem hatte/habe ich auch.

Bekam in den letzten Tagen jede Nacht unzählige Spams, die über meine Kontaktformulare abgeschickt wurden.

Ich habe das Problem nun gelöst (habe seit ca. 48 Stunden keinen Spam mehr erhalten) in dem ich im Formular einen hidden-field eingebaut habe, dass eine Zufallszahl ausgibt, die für 60 Minuten gültig ist.

Bevor das Formular abgeschickt wird, wird überprüft ob die Zufallszahl noch gültig ist. Falls ja, wird abgeschickt. Falls nein, wird nicht abgeschickt.

Der Spamrobot hat keine Möglichkeit zu wissen, wie die aktuelle Zufallszahl heißt (MD5 in Kombination mit der time()-Funktion).

Kann dir das gerne genauer per MSN/ICQ/eMail erklären, falls du möchtest.

Gruß
Thomas
 
QUOTE (Thomas G. @ Mo 14.11.2005, 0:41) im Formular einen hidden-field eingebaut habe, dass eine Zufallszahl ausgibt, die für 60 Minuten gültig ist.

Bevor das Formular abgeschickt wird, wird überprüft ob die Zufallszahl noch gültig ist. Falls ja, wird abgeschickt. Falls nein, wird nicht abgeschickt.

Einfache aber wirksame Lösung...
 
Ich wäre froh, wenn du die Mothode öffentlich erläutern könntest, denn ich habe seit einigen Tagen genau das Gleiche Problem. Und wenn man in Google nach der Mailadresse sucht, sieht man, dass unzählige weiter auch davon betroffen sind.
 
Die Methode klingt wirklich sehr interessant. Bitte erläutern! :)
 
Eine andere, etwas einfachere Methode ist bestimmte Felder an Bedingungen zu knüpfen. Z.B: bei der Tel-Nr müssen es unbedingt Zahlen sein und keine Buchstaben, Vorname und Name darf nur Buchstaben und kein @ enthalten etc. Schliesst Missbrauch nicht zu 100% aus, verringert ihn aber stark.
 
CODE $timestamp = time();
$zahl = date("d",$timestamp);
$check1 = md5($zahl);



Ins Formular baue ich folgendes Feld ein:


CODE <input type="hidden" name="Spk" value="';
echo $check1;
echo'">


Bevor das Formular abgeschickt wird (also vor der mail()-Funktion) kommt folgende Abfrage:


QUOTE if($_POST["Spk"] == $check1)
 
Hallo

Ich hatte das Problem auch. Nun habe ich dieses Script gefunden:

Captcha mit PHP, GDlib und FreeType

Es funktionier bei mir fast tadellos, bis auf die Absender eMail-Adresse. Ich weiss nicht wie ich die da rein bringe:

CODE $suchen = "\r";
$ersetzen = "\n";
$kommentarp = str_replace($suchen,$ersetzen,$_POST["memo"]);
$betreff = $_POST['betreff'];

//DE: Ausfuehren der Mailfunktion
if(mail($empfaenger,$betreff,
"
Name: ".$_POST["name"]."
eMail: ".$mail."
Memo: ".$kommentarp."
Datum und Zeit: $datum
")){
print('Der Versand war erfolgreich');
}

}
else {
print('BITTE PRUEFEN SIE IHRE EINGABE IM SICHERHEITSFELD');
}
}



Hat da jemand eine Idee?
 
CODE $suchen = "\r";
$ersetzen = "\n";
$kommentarp = str_replace($suchen,$ersetzen,$_POST["memo"]);
$betreff = $_POST['betreff'];
$empfaenger = "deine-email-adresse@domain.com";
//DE: Ausfuehren der Mailfunktion
if(mail($empfaenger,$betreff,
"
Name: ".$_POST["name"]."
eMail: ".$mail."
Memo: ".$kommentarp."
Datum und Zeit: $datum
")){
print('Der Versand war erfolgreich');
}

}
else {
print('BITTE PRUEFEN SIE IHRE EINGABE IM SICHERHEITSFELD');
}
}




Nun sollte das Formular auch bei dir ankommen,
 
Das Formular kommt schon an. Nur leider wird die eMail-Adresse vom Absender nicht als Absender eMail-Adresse angezeigt. Woran könnte das liegen?
 
@ thomas die gleiche Idee hatte ich auch. ich habe den Spass alerdings noch weiter getrieben in dem alle Felder eine md5summe bekommen haben.

es gibt aber 2 Probleme an der Geschichte

1. ein normaler Benutzer kommt um 13:59 auf die kontakt Seite, wartet etwas und füllt das Formular dann um 14:30 komplett aus und schickt es ab.
-> es ist nicht mehr gültig also den ganzen "sch***" nochmal ausfüllen

2. jemand der ein wenig was in der Birne hat kommt halt 1 Sekunde bevor er Spam verschickt auf deine Seite holt sich die Feldnamen und es mit den entsprechenden Werten ab.

was viel wirkungsvoller ist: Die Eingabe genau prüfen. z.B. mein Feld hat maxlength 50 und wenn ich eine Variable bekomme wo mehr als 50 Zeichen drin stehen dann schmeiss ich die ganze Sache einfach weg.

Das beste wäre Vermutlich man würde einen Zufallsstring im Formular verstecken und noch die Felder 100% prüfen.

Code Schnipsel
CODE <?php
$mail_feldname = md5 (date('d.m.Y H') . ' mail name');
if (isset($_POST[$mail_feldname])) {
echo 'Feldname OK eMail verschicken';
} else {
echo 'Formular ausgeben';
echo '<input name="'.$mail_feldname.'">';
}
?>



@ rene davon rate ich mal ab die mail als absender einzutragen das würde in etwa so aussehen

mail($empfeanger, $betreff, $text, "From: Absendername <Absendermail>");

Wobei die Variablen Absendername und Absendermail 100% geprüft werden müssen (keine Umbrüche ...)
 
Es schadet auch nicht nach gewissen Wörter zu suche

CODE
function isDangerous($str)
{
if (eregi('Content-Type', $str))
return true;

if (eregi('multipart/mixed', $str))
return true;

if (eregi('bcc:', $str))
return true;

return false;
}



Gegen Mail Injection sollte ich noch irgendwo eine Klasse haben, vielleicht finde ich die morgen

 
QUOTE (rene76 @ Di 29.11.2005, 18:08)Das Formular kommt schon an. Nur leider wird die eMail-Adresse vom Absender nicht als Absender eMail-Adresse angezeigt. Woran könnte das liegen?

Statt $mail einfach $_POST["mail"] verwenden.
 
Zurück
Oben