Zur Navigation

Kontaktformular durch "Anti-Spam-Grafik" sichern

1 Tilman

Hallo!

Ich möchte mein Formular vor Spammern sichern. Ich habe auf einigen Webseiten schon gesehen, dass man da auch Grafiken benutzen kann.

Ich habe es mir so gedacht, dass ich in einer Datenbank eine Tabelle mit drei Spalten mache (id, Url, Code). Es wird nach Zufallsprinzip einer der Einträge ausgweählt und die Url der Grafik abgerufen. In einem Eingabefeld muss der Benutzer diesen auf der Grafik zu erkennenden Code eingeben. Wenn der Benutzer auf Senden klickt, wird erst geprüft, ob der Code zu dem Bild passt (Datenbank).

Meine Frage:
Woher bekomme ich solche Grafiken oder wie kann ich sie machen?

09.08.2008 16:50

3 Rudy

Eine Kombination aus Postkey und Honeypot ist besser, da sie dem User nichts abverlangt. Ich verwende immer diese Technik, und ich kann nicht über Spam aus Formularen klagen - scheint also zu funktionieren. Eine Variante des Postkeys verwendet Jörg hier im Forum; ein gutes Honeypot-Feld wäre "email" oder "homepage", das per CSS ausgeblendet wird - wird das ausgefüllt, wird nicht abgeschickt. Zusätzlich die Seiten mit den Formularen auf "robots="noindex"" zu setzen schadet auch nicht, wenn das vertretbar ist (also z.B. "Eintrag erstellen" eine eigene Seite ist)

09.08.2008 17:38 | geändert: 09.08.2008 17:42

4 Tilman

Vielen Dank, Rudy.
Wie macht man das denn, mit dem Postkey und Honeypot?

17.09.2008 13:32

5 Tilman

Ich habe das Mal mit dem Captcha "Zahlen & Buchstaben" gemacht:
http://www.stoppt-den-spam.info/webmaster/captcha-tutorial/zahlen-cpatcha/vorwort.html

Ich habe es auch wie es dort steht eingebunden in mein Registrierungsformular (funktioniert auch). Allerdings kommt diese Fehlermeldung:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at E:\TIL\xampp\htdocs\myym\regmyym.php:12) in E:\TIL\xampp\htdocs\myym\regmyym.php on line 69

In Zeile 69 steht:
session_start();
if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] == $_SESSION['captcha_spam'] ... 

17.09.2008 16:00

6 Jörg Kruse

Die Session-Funktion musst du aufrufen, bevor HTML-Code ausgegeben wird

17.09.2008 16:28

7 Rudy

Ein Honeypot-Feld ist leicht einzufügen, mach einfach ein Text-Feld hinein, das Spammer unwiderstehlich finden, z.B. 'email' oder 'homepage'. Dieses blendest Du dann per CSS aus (natürlich schreibst Du auch rein dass das Feld nicht ausgefüllt werden darf), z.B.
<label id="lhomepage" for="homepage">Homepage (Bitte Feld LEER lassen!)</label><input type="text" id="homepage" name="homepage" value="" />


CSS:
label#lhomepage, input#homepage { display:none; }

Wenn das Feld ausgefüllt ist, schickst Du nicht ab. Ganz einfach.

Der Postkey ist etwas ausgebuffter. Du generierst beim Aufruf der Seite einen zufälligen Schlüssel von z.B. 50 Zeichen und speicherst Erstellungszeitpunkt, Sessionid, IP-Adresse und Schlüssel in der Datenbank. Diesen Schlüssel fügst Du als hidden-Field in das Formular ein. Sobald das Formular dann abgeschickt wird, überprüfst Du, ob der Schlüssel für diese Sessionid und IP existiert, eine gewisse Mindestzeit alt ist (Maschinen sind idR sehr schnell beim Ausfüllen von Formularen, das bekommt kein Mensch hin, z.B. 20 Sekunden, teste mal wie lang Du selbst brauchst die Daten einzufüllen) und ob er nicht verfallen ist (also zu alt, z.B. 12 Stunden). Alte Schlüssel werden aus der Datenbank gelöscht (kannst Du beim Speichern neuer Schlüssel machen). Stimmt der Schlüssel nicht, verfällt er, es wird ein neuer generiert und in das Formular eingefügt. Wenn nicht versucht wird abzuschicken und Du bereits einen Schlüssel generiert hast, updatest Du den Erstellungszeitpunkt des Schlüssels beim Seitenaufruf einfach auf NOW() und behältst ihn bei.

17.09.2008 20:30 | geändert: 17.09.2008 20:32

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]