Web Formulare sichern

In einem früheren Beitrag hatte ich einige Programme vorgestellt, mit denen man Web Formulare bearbeiten kann. Diese Programme erstellen Scripts, die die Daten aus dem Web Formular in einer E-Mail weiterleiten, in eine Datenbank oder Text-Datei schreiben.

Wie kann man nun seine Formulare sichern, damit diese nicht von Spammer und Robotern missbraucht werden?

Hier einige Tipps:

Felder und Variablen-Inhalt überprüfen

Wenn man in seinem Formular einige Felder vorgibt, dann sollte man deren Inhalt überprüfen, z.B. dass im Feld E-Mail auch tatsächlich eine E-Mail-Adresse drin steht. Wenn man eine Liste von möglichen Antworten vorgibt (z.B. in einem <select>), sollte einer dieser Möglichkeiten auch als Antwort gegeben sein. Die Länge der Antworten kann man auch überprüfen und somit falsche Einträge entdecken.

Automatische Antworten

Es ist schon fast ein ungeschriebenes Gesetz im Internet, dass der Web-User eine automatische Antwort erhält, wenn er ein Web-Formular ausfüllt. Allerdings wurden sehr oft, die eigentlichen Formular-Einträge auch in dieser E-Mail aufgelistet. Dies machen sich Spammer zu nutzen: sie benutzen automatisierte Scripts, die Formulare automatisch ausfüllen. In diesen Formularen steht dann ein willkürlicher Absender und die Werbung des Spammer. Wenn das Formular eine automatische E-Mail an den Benutzer schickt, dann erhält dieser die Spam-Werbung, obwohl er das Formular niemals mit diesem Inhalt gefüllt hatte.

Darum sollte man folgendes beachten: immer 2 verschiedene E-mails erstellen. Eine automatische E-Mail für die Person, die das Formular eingefüllt hat und eine für den Betreiber der Website. In der ersten Mail steht nur ein kurzer Text worin man dem Benutzer für seine Anfrage dankt. Diese Mail sollte nicht die Formular-Einträge beinhalten, weil sie sonst für Werbezwecke missbraucht werden kann. In der 2. Mail, die an den Website-Betreiber geht, können alle Formular-Daten aufgelistet sein.

In beiden E-Mails sollte man folgende Informationen automatisch einfügen:

  • IP Adresse des Absender – hierbei auch auf den „HTTP_X_FORWARDED_FOR“ Header achten, der von Proxy-Server eingefügt wird
  • Browser des Absender – welcher Browser wurde verwendet? (HTTP_USER_AGENT)
  • Uhrzeit und Datum

Mit diesen Informationen lässt sich leicht herausfinden, ob irgendeine automatische Attacke auf das Formular stattgefunden hat.

Captcha Codes

Sie können ein Formular sehr stark sichern, in dem ein grafischer Captcha-Code benutzt wird. Ein zusätzliches Programm erzeugt ein Bild mit einer zufälligen Reihenfolge von Buchstaben und Zahlen. Diesen Code muss man korrekt in ein Feld eintragen, damit das Formular abgeschickt werden kann. Roboter können die Captcha-Codes noch nicht entschlüsseln und deshalb werden die Formulare sehr sicher.

Ein gutes Script finden Sie bei Neoprogrammers: Securimage CAPTCHA. Dieses Script kann man mit minimalem Aufwand in bestehende Formulare einbauen.

Probleme mit Bcc: Headern in Scripts

Man sollte sein Script auf jeden Fall so anpassen, dass es nicht benutzt werden kann, um eine Unmenge von E-Mails zu verschicken. Einige Spammer verwenden die Bcc: Header um die Antwort von einem Web-Formular an sehr viele Adressen zu schicken. Das Einfügen des Bcc: Headers funktioniert meistens, indem eine leere Linie in einen Feld-Eintrag vorgenommen wird. Deshalb sollte man alle leeren Linien aus den Formular-Einträgen löschen, z.B. mit diesem PHP-Befehl: preg_replace(‚/[\x00-\x1F]/‘, “, $feldname);

Schwarze Listen

Man sollte auch schwarze Listen erstellen, die mit den Formular-Einträgen verglichen werden. Wenn ein Wort aus der schwarzen Liste in den Formular-Einträgen vorhanden ist, dann sollte das Script nicht weiter ausgeführt werden, also keine E-Mail verschickt werden.

Durch das Verwenden einer schwarzen Liste in einer separaten Datei, kann man alle seine Formulare verwalten und braucht nur an einer Stelle neue Einträge vorzunehmen. In dieser Liste können z.B. auch Absender IP-Adressen stehen. Forms To Go macht es sehr einfach, solche Schwarzen Listen in ein Script einzubauen.

Verbotene Wörter

Hier wird ein Array mit verbotenen Wörtern gesetzt und anschliessend alle die User-Einträge des Formulars auf diese Wörter überprüft. Wenn eines dieser Wörter in den Einträge vorhanden ist, dann wird das Script abgebrochen und die Antwort umgeleitet auf die IP-Adresse des Spammers.

function stopwords_check()
{

 $bannedstopwords[] = 'poker';
 $bannedstopwords[] = 'gamble';
 $bannedstopwords[] = 'casino';
 $bannedstopwords[] = 'holdem';
 $bannedstopwords[] = 'viagra';
 $bannedstopwords[] = 'backgammon';
 $bannedstopwords[] = 'blackjack';
 $bannedstopwords[] = 'black jack';
 $bannedstopwords[] = 'roulette';

 foreach ($_POST as $fieldname => $fieldvalue) {
  foreach ($bannedstopwords as $stopword_key => $stopword_value) {
   $pattern = "/.*$stopword_value.*/";
   if (preg_match($pattern, $fieldvalue)) {
    header("Location: http://127.0.0.1");
    exit;
   }
  }
 }
}

stopwords_check();

Verbotene IP-Adressen

Folgendes Script sucht die eigentlichen IP-Adresse des Absenders heraus und vergleicht diese mit einer Text-Datei, in der verbotene IP-Adressen stehen.

function ipaddress_check($ClientIP)
{

 $bannedIPsFile = '/path/to/banned-ip.txt';

 if (file_exists($bannedIPsFile) === false) {
  echo 'The banned IPs file:  ' . $bannedIPsFile . ' cannot be found on the server.';
  exit;
 }

 $bannedips = file($bannedIPsFile);

 foreach ($bannedips as $ip_key => $ip_value) {
  if (rtrim($ip_value) == $ClientIP) {
   header("Location: http://127.0.0.1/");
   exit;
  }
 }
}

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
 $ClientIP = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
 $ClientIP = $_SERVER['REMOTE_ADDR'];
}

Mit diesen verschiedenen Tipps sollten Ihre Web-Formulare sicherer werden und nicht mehr von Spammer missbraucht werden können.

Veröffentlicht in DE » Alles, DE » Entwicklung, DE » Sicherheit, DE » Tips & Tricks, DE » Web Hosting.