Author Archives: mlausch

So können Sie mit PHP Kontaktformulare vor Spam schützen

Kontaktformulare sind auf fast jeder Homepage eingerichtet, leider werden die Kontaktformulare häufig missbraucht. Der Grund ist hierfür oft eine unsichere Programmierung, die einfach ohne Überprüfung der Eingabe eine E-Mail sendet.

Hier gibt es kleine Lösungen, um Missbrauch zu vermeiden:

Ein Bot verwendet immer BB-Codes, obwohl das Kontaktformular keinen BB-Code Editor hat.

Dies kann so verhindert werden:
if(stristr($nachricht,"[link=") || stristr($nachricht,"[url=") || stristr($nachricht,"a href=")){
echo "Bitte kein BB-Code verwenden.";
}

Formulare werden per POST oder GET übertragen, per Log konnte ich vestellen das auch GET-Werte an die URL angehängt wurden.

Sollte Ihr Formular nur per POST übertragen, können Sie sich z.B. so schützen:
if(count($_GET)>0){
//Spamfalle: Formular sendet nichts per GET sondern POST
exit("Wegen Spam-verdacht abgelehnt (GET)");
}

Mit Count wird das Array $_GET gezählt, dies sollte 0 sein, da wir ja kein GET verwenden.
Anders rum geht es natürlich auch, wenn kein POST verwendet wird:

if(count($_POST)>0){
//Spamfalle: Formular sendet nichts per GET sondern POST
exit("Wegen Spam-verdacht abgelehnt (GET)");
}

Zeitdauer für das Ausfüllen und Absenden des Formulars:
Eine Maschine ist wesentlich schneller als ein Mensch, dies kann man sich zu nutze machen.
Wird ein Formular unter 10 Sek. ausgefüllt, kann man davon ausgehen, dass dies kein Mensch war.

Zum Formular einen neuen versteckten Button hinzufügen:
echo '<input name="time" type="hidden" value="'.time().'" />';

Wird das Formular auf der Webseite jetzt aufgerufen, steht im Button ein aktueller Timestamp (Zeitstempel), wir wissen also wann das Formular geladen wurde.

if ( isset($_POST['time']) && is_numeric($_POST['time'])) {
$posted = intval($_POST['time']);
$sendezeit = (time() - $posted);
if ($sendezeit < 10 || $sendezeit > 36000) {
echo "Mail kann gesendet werden";
}
else {
echo "Wegen Spamverdacht abgelehnt!";
}
}

Bots sind dumm, nutzen Sie dies aus:
Spambots füllen alle Felder eines Formulars aus, selbst wenn Sie nicht zu sehen sind.

<input style="display: none;" title="Homepage eintragen" name="webseite" type="text" />
<input style="display: none;" title="E-Mail eintragen" name="email" type="text" />

CSS display:none sagt, dass dieses Feld nicht erscheinen soll, es ist also nur noch im Quelltext.
Bots sehen aber nur den Quelltext, Grafiken, Javascripte und Videos können nicht bzw. sehr schlecht ausgewertet werden.

Jetzt muss nur geprüft werden, ob hier auch nichts drin steht:
if(!empty($_POST['webseite']) || !empty($_POST['email'])){
exit("Spam!");
}
else {
echo "kein Spam";
}

Überprüfen der Syntax von E-Mail-Adressen:
E-Mail Adressen sollten auf Gültigkeit überprüft werden, z.B. gehört in jede e-mail Adresse auch ein at-zeichen (@), punkt, tld,…

if ( ! preg_match('/^[a-z0-9_\.\-]+@[a-z0-9\.\-]+\.[a-z]{2,}$/i', $_POST['email']) ) die ("Die E-Mail adresse ist ungültig!");

Entfernen Sie alle „Cc:“ (Carbon copy) oder „Bcc:“ (Blind Carbon Copy) aus Ihrer Variablen:
Mit PHP können Sie es so erreichen:

$absender = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['absender'] );
$nachricht = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['nachricht'] );
$betreff = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['betreff']);
$nachname = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['nachname']);
$vorname = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['vorname']);
$telnr = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $_POST['telnr']);

Überprüfen Sie auch die Gültigkeit der E-Mail Adresse vom Absender:
if(!ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$",$Absender))
{
echo "Sie haben keine richtige E-Mail Adresse eingegeben!";
}

Anmerkung:
Oft werden auch CAPTCHA und Rechenaufgaben im Formular verwendet, davon kann ich nur abraten. Captcha sind oft sehr schlecht zu lesen und Rechenaufgaben lösen kann ein Bot auch. Das einzige was man damit erreicht, ist seinen Besucher zu verärgern.

Ihr gespeichertes Girokonto ist nicht genügend gedeckt

Es sind aktuell Mails im Umlauf, bei den der E-Mail Anhang mit Schadsoftware (TROJANER) verseucht ist. Als Firma wurde „Abrechnung Mail & Media GmbH“ angegeben. Die Absender sind gefälscht. Wenn Sie bereits auf den Anhang geklickt haben, ist wahrscheinlich Ihren Computer bereits infiziert. Wer den Dateianhang geöffnet hat, sollte den PC von seinem aktuellen Antivirenprogramm durchscannen lassen. Falls Sie sich gar nicht auskennen, fahren Sie den Rechner runter und suchen Sie sich einen EDV-Fachman in Ihrer Umgebung

Die Texte sind immer unterschiedlich, so kann der Inhalt aussehen:

Sehr geehrter Kunde,

Ihre Bank hat die Lastschrift storniert. Sie haben eine ungedeckte Forderung bei der Firma xxx.

Aufgrund des bestehenden Zahlungsverzug sind Sie verpflichtet dabei, die durch unsere Beauftragung entstandenen Gebühren von 45,15 Euro zu tragen Die Zahlung erwarten wir bis spätestens 17.04.2015. Namens und in Vollmacht unseren Mandanten fordern wir Sie auf, die offene Forderung schnellstens zu begleichen.

Bitte beachten Sie, dass keine weitere Mahnung erfolgt. Nach Ablauf der Frist wird die Angelegenheit dem Staatsanwalt und der Schufa übergeben. Die detaillierte Kostenaufstellung, der Sie alle Buchungen entnehmen können, ist beigefügt. Für Fragen oder Reklamationen erwarten wir eine Kontaktaufnahme innerhalb des gleichen Zeitraums.

Mit besten Grüßen

Abrechnung xxx xxx

Achtung, der Text und die Namen sind nie gleich! Es kann genauso ein Rechtsanwalt Brunfels … sein.

Wir haben bei 3 Kunden feststellen müssen, dass ein Versand über SMTP nicht möglich war. Obwohl der Server ordnungsgemäß funktionierte. Nach langem Suchen haben wir festgestellt, dass es am Telekom-Router lag. Grund hierfür ist, dass diese Router eine Liste „sicherer E-Mail-Server“ kennen und den E-Mail-Versand über andere Server verweigern. Es gibt 2 Möglichkeiten, das Problem zu umgehen.

Funktion entweder deaktivieren:

1.) In Speedport einloggen
2.) Punkt „Internet“ anwählen
3.) links „Liste der sicheren Email-Server“ anklicken
4.) Häkchen bei „Liste der sicheren Email-Server verwenden“ heraus nehmen.
5.) aus Speedport ausloggen.

Oder Mail-Server hinzufügen:
1.) In Speedport einloggen
2.) Punkt „Internet“ anwählen
3.) Geben Sie „mail.lama-creation.de“ an