bekomme Spam über PHP Mailformular

ziriander

Erfahrenes Mitglied
Hallo zusammen,

seit einiger Zeit bekomme ich über mein PHP Mailformular Spam zugeschickt. Es sind zwar nur 5 oder 6 Mails pro Tag, aber es ist trotzdem nervig.

Gibt es die Möglichkeit am PHP Script etwas zu verändern ?


Hier ist mein Script:

PHP:
	if ($_POST["action"]=="form_senden")
	{
			if ((!empty($_POST["email"])) && !empty($_POST["name"]))
			{
				if (!empty($_POST["email"]))
				{
					if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$", $_POST["email"]))
			    	{
						do_mail($_POST["email"]);
			  		}
					else
					{
						echo "<div><font color=\"#CC3300\" size=\"2\"><strong>Bitte &uuml;berpr&uuml;fen Sie Ihre eMail-Adresse</strong></font></div>";
						include ("kontakt_form.php");
					}
				}
				elseif (!empty($_POST["name"]))
				{
					if (!empty($_POST["email"])) {$email = $_POST["email"];} else {$email = "floyd@mayasign.de";}
					do_mail($email);
				}
			}
			else
			{
				echo "<div><font color=\"#CC3300\" size=\"2\"><strong>Bitte geben Sie Ihren Namen und Ihre eMail-Adresse an</strong></font></div>";
				include ("kontakt_form.php");
			}
	}
	else include ("kontakt_form.php");
				
	function do_mail($email)
	{
			$empf_mail = "floyd@mayasign.de";
			$betreff = "Kontaktformular von der Webseite";

			$text = "
Über das Kontaktformular wurden folgene Daten gesendet:\n 
Vorname ....... ".$_POST["vorname"]."
Name .......... ".$_POST["name"]." 
Strasse/Nr .... ".$_POST["strasse"]. "
PLZ ........... ".$_POST["plz"]."
Ort ........... ".$_POST["ort"]."
Telefon ....... " .$_POST["telefon"]. "
eMail ......... " .$_POST["email"]. "
				
				Text:
				". $_POST["kommentar"]."";
				
				 //:.. EMAIL SCHICKEN
				$absender = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $_POST["email"] );
				$absender = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $absender );
				$empf_mail = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "",  $empf_mail );
				$empf_mail = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $empf_mail );
				$text = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $text );
				$_POST["email"] ? $absender = $absender : $absender = $empf_mail;
				mail($empf_mail, $betreff, $text, "From: <$absender>\n");
				
				echo"<font color=\"#CC3300\" size=\"2\"><strong>Vielen Dank, wir haben folgende Daten erhalten und werden Ihnen bald möglichst antworten.</strong></font><br><br>";
				
				echo $best = "
				<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">
				<tr><td><font color=\"#333333\" size=\"2\"><b>Vorname:</b></td><td><font color=\"#333333\" size=\"2\">".$_POST["vorname"]."</b>&nbsp;</font></font></td></tr>
				<tr><td><font color=\"#333333\" size=\"2\"><b>Name:</b></td><td><font color=\"#333333\" size=\"2\">".$_POST["name"]."</b>&nbsp;</font></font></td></tr>
				<tr><td><font color=\"#333333\" size=\"2\"><b>Strasse/Nr:&nbsp;&nbsp;&nbsp;&nbsp;</b></td><td><font color=\"#333333\" size=\"2\">".$_POST["strasse"]."</font></font></td></tr>				
				<tr><td><font color=\"#333333\" size=\"2\"><b>PLZ|Ort:</b></td><td><font color=\"#333333\" size=\"2\">".$_POST["plz"]."&nbsp;".$_POST["ort"]."</font></font></td></tr>
				<tr><td><font color=\"#333333\" size=\"2\"><b>Telefon:</b></td><td><font color=\"#333333\" size=\"2\">".$_POST["telefon"]."&nbsp;</font></font></td></tr>
				<tr><td><font color=\"#333333\" size=\"2\"><b>eMail:</b></td><td><font color=\"#333333\" size=\"2\">".$_POST["email"]."&nbsp;</font></font></td></tr>
				<tr><td>&nbsp; &nbsp;</td><td>&nbsp; </td></tr>
				<tr><td><font color=\"#333333\" size=\"2\"><b>Ihr Text:</b></td><td><font color=\"#333333\" size=\"2\">".$_POST["kommentar"]."&nbsp;</font></font></td></tr>
				</table>";
}


Danke für eure Hilfe
Ziriander
 
Zuletzt bearbeitet:
Dann bau ein Captcha ein .... siehe Google, Forumsuche etc..... altes Thema
 
Haben die Spam-Mails immer den gleichen Inhalt?

Ich würde es ersteinmal mit einer "Bad-Word-List" probieren. Schreibe einfach ein kleines Script welches auf bestimmte Wörter prüft, wenn dies vorhanden ist wird kein Eintrag erstellt.

Ein Captcher ist zwar im Endeffekt momentan die einzige Lösung, aber für mich nicht sehr Userfreundlich.

Man könnte auch prüfen ob der Sender vorher auf der Seite gesurft hat, wenn nicht wird auch kein Eintrag erstellt. Denn es wird niemand die direkte URL zum Kontaktformular eingeben um dort eine Mail senden.

Gruß soyo
 
Zuletzt bearbeitet:
Erst mal Danke für eure Antworten.

Der Inhalt der Mails variiert immer leicht. Es geht im Großen und Ganzen um Links zu Autoverkäufern. Ein Bad-Word-List würde in dem Fall eventuell auch Mails ausschließen die keinen Spam enthalten. Also werde ich mir den Captcha zumindest mal anschauen.
 
So lange du nix mit Autos zu tun hast, kannst du doch die Mails mit den Links zu Autoverkäufern sperren ... aber das ist ja deine Sache.

Wenn nicht prüfe erstmal, ob der Spam-Bot direkt eine Mail sendet oder davor auf dem eigentlich Kontaktformular war. Wenn nicht kannst du mit einem versteckten Formular Elemtent ein Wert übergeben und diesen auf Existenz vor dem Senden prüfen.
 
Das mit dem "Spam-Bot" und "Existenz überprüfen" verstehe ich nur theoretisch. Wo finde ich denn mehr zu dem Thema ?
 
Ein Beispiel:

formular.html - Deine HTML-Formular
send.php - Dein PHP-Script zum Senden und Prüfen der Daten

Ein Scanbot füllt das Formular nicht automatisch aus, sondern sendet direkt per $_POST-Variablen über die send.php eine Mail. Um ersteinmal Ruhe zu schaffen genuegt es den Namen des PHP-Script zu ändern. Eine andere Möglichkeit wäre, ein verstecktes Formular-Elemt mit einem bestimmten Wert im Formular einzubauen und diesen dann im PHP-Script zu prüfen. Dieser Wert sollte sich min. täglich ändern.

Hier einfach mal ein Beispiel:
HTML-Formular:
HTML:
  <input type="hidden" name="fuckoffspammers" value="<?php echo md5(date("d.m.Y"))?>">

PHP-Script:
PHP:
  if($_POST['fuckoffspammers'] != md5(date("d.m.Y"))) exit();

Nun haben wir schon einmal die Bots ausgeschlossen, die direkt über das PHP-Script versuchen eine SPAM-Mail zu schreiben. Wenn du jetzt noch prüfst, wie lange gebraucht wird das Formular auszufüllen solltes du eine Großzahl der restlichen SPAM-Bots ausgeschlossen haben. Dein kein User wird es schaffen ein komplettes Formular in 1 Sekunde auszufüllen, so wie es die meisten Bots tun.

Versuche erst einmal das. Wenn es nicht funktioniert wirst du um einen Captcher nicht herumkommen.

Gruß soyo
 
OK, das habe ich verstanden, eigentlich ist es sogar recht simpel. Bin gespannt ob es wirkt.

Viele Dank noch mal.
 
Zurück