HTML Quellcode

Spam in Formularen verhindern

Regelmäßig durchsuchen Spam-Bots das Internet nach Formularen, die sie automatisch füllen können. Oft sind auch die eigenen Webseiten betroffen, was beispielsweise in Gästebüchern sehr ärgerlich ist, da auch andere Benutzer diesen Spam sehen können.

Daraufhin wurden die sogenannten Captchas erfunden. Diese sind meist getarnte Texte in Bildern, die man erkennen soll. Dadurch, dass die Programme immer raffinierter wurden was Captchaerkennung angeht wurden diese immer unkenntlicher, dass man selbst als Internetnutzer mehr rät, als erkennt und letztendlich darauf hofft, eine richtige Angabe gemacht zu haben. Das nervt und hindert manche den einen oder anderen Eintrag zu machen. Hier zeige ich, wie man seine Formulare optimal vor Spam schützt, aber kein Captcha benutzt.

Das HTML

Zunächst einmal haben wir das normale Formular. Wir verwenden 2 E-Mail Inputs. Das eine wird mit einem Container umgeben und erhält eine class.

		<form method="post" action="programm.php">
			<label for="name">Vorname/ Name</label>
			<input id="name" name="name" size="60" value="" />
			
			<label for="email">Ihre E-Mail Adresse</label>
			<input id="email" name="email" size="60" value="" />
			
			<span class="invisible">
				<label for="mail">Bitte dieses Feld leer lassen. Ihre E-Mail Adresse wird nur EINMAL ben&ouml;tigt.</label>
				<input id="mail" name="mail" size="60" value="" />
			</span>
			
			<label for="homepage">Ihre Webseite</label>
			<input id="homepage" name="homepage" size="60" value="" />

            <input type="submit" value="Abschicken" name="submit" />

		</form>

Ein wenig CSS

Mit CSS machen wir nun das zweite E-Mail Eingabefeld „unsichtbar“ für die Benutzer. Für alle, die CSS im Browser ausgeschaltet haben, hinterlassen wir einfach eine Nachricht, dass sie das 2. Feld leer lassen sollen.

			.invisible { 
				display:none; 
			}

PHP und fertig ist der Spamschutz

Mit PHP prüfen wir jetzt, ob das entsprechende Feld leer gelassen wurde. Wenn nicht beide E-Mail Felder gefüllt wurden, dann die Eingabe bearbeiten. Andernfalls Fehlermeldung oder sonstiges ausgeben. Hier liegt der Knackpunkt. Normale Spamprogramme erkennen nicht, dass das Feld leer gelassen werden muss.

  if(isset($_POST['email']) && $_POST['mail']) {
    //Abbruch, da Spam verdacht
  }
  else {
   //Normalen Script ausführen
}

Über den Autor:

Mein Name ist Fabian Geier, Gründer von SourceBlogging, Läufer und WordPress-Enthusiast. Du findest mich vor allen Dingen auf meiner Webseite.