Kontaktformular vor Spam schützen (ohne captcha?)

Dustin84

Erfahrenes Mitglied
Hallo,

ich habe ein simples Kontaktformular, welches ich gerne gegen Spam schützen möchte. Mit ist bisher nur die Catpcha Methode bekannt, die ich aber eher ungern nutzen würde.

Was gibt es sonst für Möglichkeiten?

Gruß
D.
 
Hmm na ja ich hab das mal so gemacht, dass ich in ein Hidden-Field einen MD5-codierten Timestamp geschrieben habe und beim abschicken dann geprüft habe, ob der Timestamp noch der gleiche is oder ob der vom Bot evtl geändert wurde. Dann hab ich noch einen Timestamp in einem Hidden-Field eingetragen und geprüft, ob das Formular in weniger als 3 Sekunden ausgefüllt wurde (da die Bots ja recht flott sind und Menschen nicht).
Ob das wirklich effektiv ist weiß ich allerdings nicht.
 
Zuletzt bearbeitet:
Hi,

außer die schon beschriebene Methode der "Zeitmessung" gibt es glaub ich nicht viel. Wobei das zumindest schon ein bisschen hilft.

Die Frage ist jetzt halt was dir an Captchas generell nicht gefällt. Wenn es die Optik ist, kannst du ja z.B.:

a) ein Listenfeld mit den ganzen Wochentagen einbauen und beim Versenden muss dann der heutige Tag ausgewählt werden

oder

b) du machst ein Textfeld und man muss vor dem Versenden den Tag, den Monat und das Jahr zusammenzählen und die Lösung eintragen

Gruß Thomas
 
Moin Dustin,

erläutere doch erstmal, was du unter CAPTCHA verstehst, um nicht von vornherein diverse Möglichkeiten(wie bspw. hier genannt ) auszuschliessen :)

Was sich bei mir als recht wirkungsvoll herausgestellt hat:
Ich packe ein Feld namens "subject" ins Formular und verberge es(per CSS) ...das Feld hat keinen Inhalt.
Bots versuchen trotzdem, dies Feld auszufüllen, und wenn es dann mit Inhalt daherkommt, hab ich den Schlingel erwischt.

Meist verwende ich aber eine simple Aufgabe, idR. habe ich einen Submit-Button mit diversen Icons drauf in verschiedenen Farben, der User soll dann zum Senden auf eines mit einer vorgeschrieben Farbe klicken, was ich dann prüfe.
Allerdings ist diese Methode nicht barrierefrei :-(
 
Ich denke das mit dem versteckten Feld würde schonmal helfen. Wenn ich dann dazu noch den Timestamp von 4 Sekunden ( Wie würde da der Code aussehen?) für die IP nehme, könnte das sicherlich doch schon einiges bringen.
(Ip bekomme ich so?)
PHP:
$ip=getenv("REMOTE_ADDR");


Zudem könnte man doch auch noch prüfen, ob eine URL angegeben wurde (was bei meinem Formular eigentlich nie der Fall ist) und das Formular dann nicht versenden.
(Wenn der Bot z.B. eine URL beim Feld Namen angibt. Richtig ?

Gruß
D.
 
Hi

du solltest dir für solche Überprüfungen reguläre Ausdrücke angucken. Desweiten gibt es auch einfachere Captchas wie "Wieviel Beine hat ein Pferd". Ansonsten könntest du folgendes für den Zeitcode verwenden.
HTML:
<input type="hidden" name="stamp" value="<?=time();?>" />
PHP:
$bot_speed = time()-4;
if( $_POST['stamp'] <= $bot_speed ) //erwischt
  die('Humans only');
Die Ip_Adresse kriegst du mit
PHP:
$ip = $_SERVER['REMOTE_ADDR']
 
Hi,

Ansonsten könntest du folgendes für den Zeitcode verwenden.
HTML:
<input type="hidden" name="stamp" value="<?=time();?>" />

wenn Ihr da etwas mit versteckten Feldern einbauen wollt, dann nehmt keine hidden fields sondern, wie von Sven vorgeschlagen, per CSS versteckte Felder. Es wäre schon ziemlich dämlich, wenn ein Bot ein hidden field ausfüllt. Ein per CSS ausgeblendetes Feld zu erkennen, ist doch viel schwieriger.

LG
 
Hi

Wenn der Bot das hiddenfield ausfüllt, könnte man das per
PHP:
if( is_numeric($_POST['stamp']) ){//Überprüft ob $_POST['stamp'] eine Zahl ist
  $bot_speed = time()-4;
  if( $_POST['stamp'] <= $bot_speed ) //erwischt
    die('Humans only')
}
else
  die('Humans can\'t change hidden fields :P');
überprüfen.
 
Zuletzt bearbeitet:
warum wird überprüft, ob stamp eine Zahl ist ? Das ist doch egal, ob der Bot eine Zahl oder ein Wort eingibt. :confused:
 
Zurück