Kontaktformular gegen Spam absichern

JamesT

Erfahrenes Mitglied
Hallo liebe Community,

also es wurde letztens über meinen Server durch fremdeinwirkung spam versendet, ich habe sofort alle qmail dienste gestoppt, die anstehenden queues gelöscht und das kontakformular deaktiviert.

Hingehend zu dieser Problematik hab ich mich im Netz informiert und folgendes gelesen:

Auch beim Spam-Versand selbst füllen Spammer natürlich nicht manuell ein Kontaktformular aus - da tausende E-Mails gleichzeitig versendet werden sollen, werden die Daten über gefälschte, so genannte POST-Requests (das normale Ausfüllen/Absenden eines Kontaktformulars wird ebenfalls so genannt), an das jeweilige Skript übergeben.

Hierbei fügt der Spammer in die Feldwerte Umbruchzeichen ein, gefolgt von z.B. einem "Bcc:" und weiteren E-Mail-Adressen. Kommt nun eine auf diese Weise übergebene Variable als "Subject" oder "From" (oder in Form einer anderen Headerzeile) in der E-Mail zum Einsatz, wird eine weitere Zeile in den Mailheader mit zusätzlichen, meist mehreren hundert oder tausenden, Addressaten eingefügt. Zudem werden noch weitere Headerzeilen, z.B. mit einem anderen Betreff und schließlich natürlich auch ein anderer Mailtext / Inhalt eingefügt.

Nun geht es zur Absicherung meines formulars um mich vor diesem Spam zu schützen:

Alle Variablen, die in einem E-Mail-Header verwendet werden, müssen auf Umbruchzeichen geprüft werden. Wird ein solches entdeckt, kann das Skript bedenkenlos mit einer Fehlermeldung abgebrochen werden. Da Umbruchzeichen über ein normales INPUT-Feld von Formularen überhaupt nicht eingegeben werden können, kann es sich in solchen Fällen nur um einen missbräuchlichen Spamversuch mittels eines gefälschten POST-Requests handeln!

Falls es sich beim Ihrerseits eingesetzten Kontaktformular um ein in PHP geschriebenes Skript handelt, sollten dort die Parameter an den Stellen 1,2,4 und 5 auf Umbruchzeichen hin überprüft werden. Dies ist z.B. mit dem folgenden Code möglich:

if ( strstr($_POST['email'], "\n") ) die ("NO SPAM HERE!");



Erklärung zu obenstehender Codezeile:

Wird in dem POST-Wert "email" ein Umbruchzeichen entdeckt, so wird das Skript mit der Fehlermeldung "NO SPAM HERE!" abgebrochen. Bitte achten Sie darauf, alle Variablen zu prüfen bzw. den Code auf Ihr Skript und Ihre Feld- bzw. Variablennamen anzupassen.

Das würde ich gerne einbauen, nun meine Frage an euch, ist diese Methode wirklich sicher? Ich poste unten noch einen Auszug aus meinem Formular, da ich nicht wirklich weiss wie man das mit dem Umbruch macht, kann ich auch nicht testen ob man keinen
Spam mehr versenden kann, ich will jedoch nicht warten bis es wieder passiert.

Könnt ihr mir sagen ob es so richtig ist?:

PHP:
				<?PHP
					if($HTTP_POST_VARS['smail']==1){
						if ( strstr($_HTTP_POST_VARS['email'], "\n") ) die ("NO SPAM HERE!");
						if ( strstr($_HTTP_POST_VARS['betreff'], "\n") ) die ("NO SPAM HERE!");
						if ( strstr($_HTTP_POST_VARS['text'], "\n") ) die ("NO SPAM HERE!");
						mail("email@gmx.net",$HTTP_POST_VARS['betreff'],$HTTP_POST_VARS['text'],"From: ".$HTTP_POST_VARS['email']."\r\n");
						echo "	<div align='center'>
									<br><br><br><br><br>
										Vielen Dank für Ihre Nachricht! Wir werden uns umgehend bei Ihnen melden!
									<br><br><br>
									xxx
								</div>";
					
					}else{ ?>

Danke im voraus für eure Hilfe.

Grüße

Jamest
 
Zuletzt bearbeitet:
kann denn nichtmal jemand kurz drüberschauen?

Will ja nur wissen, ob das Grundsätzlich ok ist. :)

Dankeschön. :)
 
Wunderbar. ;-)

Nur wollte ich wissen, ob das so wie ich es jetzt schon programmiert hab ok ist, und ich das skript wieder aktivieren kann, oder nicht. :-)

Grüße

JamesT
 
Du kannst das so lassen wenn du GARANTIERT keine Mail haben willst ;)
Im Betreff oder Eingabefeld(Subject) sollten schon noch Linefeeds (\n) vorkommen können.

Im email Feld macht es Sinn

Allerdings gibt es eine andere Variante
Schicke nur Dir selber HARDGECODET eine Mail
Da kann dann auch niemand dran rumdrehen.
Mach ich immer so :)
Der User Bekommt ne Meldung das alles Abgeschickt wurde
PHP:
	$to = "thomas@NOSPAM.de";
 	$subject = "WWW ANFRAGE";
 	if (mail($to, $subject, $mailbody))
 	{
    		echo "<div align='center'><p>ERFOLGREICH </p>"
        }
 
Zuletzt bearbeitet:
Zurück