Frage von Fizz987, 37

HTML Formular mit Javascript Frage?

Hallo,

ich habe auf meiner Webseite ein einfaches HTML Kontaktformular das mit einem "action"-Tag beim Absenden Variablen an ein php script übergibt. Das funktioniert auch alles.

Nun werde ich aber von SPAM Bots geflutet. Daher war mein Gedanke eine Zeitmessung mittels Javascript einzubauen. Diese funktioniert auch. Aber ich komme nicht darauf wie ich sagen kann: Wenn die Variable kleiner als 20 ist schick das Formular nicht ab.

Dies geht mit einer if Abfrage, das ist mir bewusst, die hab ich auch. Aber wie sage ich dem Form das es das beachten soll? Kann ich im action Tag sagen führe die Methode aus und entscheide daran? Da sind bei mir leider jegliche Versuche gescheitert das in einen Syntax zu bringen.

Es wäre natürlich am besten sagen zu können: If (var <= 20) schicke die Daten an das falsche .php Script ansonsten an das richtige.

Es kann ja nicht so schwer sein, aber ich komm nicht drauf. Totalles Brett vorm Kopf.

Wäre toll wenn mir hier jemand helfen könnte.

Danke.

Antwort
von fluffiknuffi2, 9

Du kannst das auch mit PHP machen. Baust halt in das Formular ein Feld mit Zeitstempel ein:

<form>
  ...
  <input type="hidden" name="token" value="<?php kodiere(time() ?>">
</form>

Wichtig ist die Funktion kodiere: Du schreibst nicht direkt den Zeitstempel mit hinein sondern veränderst ihn ein wenig damit Bots nichts mit ihm anfangen können. Vielleicht reicht schon so was:

function kodiere($timestamp) { return -$timestamp * 10; }
function dekodiere($value) { return -$value / 10; }

Und wenn das Formular dann bei deinem PHP-Skript ankommt schaust du halt, dass der Zeitstempel mindestens x Sekunden alt ist:

$value = isset($_POST['token']) ? (int) $_POST['token'] : 0;
$seconds = 10;
if ($value == 0 or dekodiere($value) > time() - $seconds) {
  die('Ungültiger Token!);
}

Irgendwie so. (Code nicht getestet.)

Antwort
von webflexer, 13

Die Bots lesen immer die Adresse des "action" Parameters aus und fluten dann die PHP-Datei die dort angegeben ist.

Wenn du das action einfach leer lässt und per JavaScript einen Klick-Event-Handler auf den Senden-Buuton abfragst und bei erfolgreich ausgefüllten Feldern einen Ajax-Aufruf auf dein PHP Script machst und die Formularfelder übergibst hast du mit den Bots Ruhe.

Eine weitere sehr einfache und meist erfolgreiche Methode die bots abzuwehren ist folgendes.

Du setzt am Ende aller Formularfelder ein weiteres Formularfeld und blendest dieses per CSS aus. Da die bots alle Felder "ausfüllen" wird auch dieses Feld ausgefüllt, somit weißt du, wenn dieses Feld ausgefüllt wurde ist dies kein "normaler" Seitenbesucher gewesen und kannst dies erfolgreich abfangen.

Antwort
von Herb3472, 26

Hast Du schon an die Möglichkeit einer Captcha-Abfrage gedacht? Du könntest auch das Ergebnis einer einfachen Rechenoperation abfragen. Der Bot kann sicher kein Rechenergebnis eintragen


Kommentar von Fizz987 ,

Danke erstmal für die Antwort. Ja an Captcha habe ich auch schon gedacht. Aber Captcha will ich auf keinen Fall. Es geht mir wirklich darum das Formular mit dem JS zu beeinflussen. Oder sollte jemand eine andere Idee haben nehme ich die auch gerne an. Solange die Zeitmessung drinbleibt. Ich wäre wirklich über jede Hilfe dankbar.

Antwort
von SergeantPinpack, 29

Eine Möglichkeit wäre z.B. eine zusätzliche Captcha-Abfrage.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten