# Kontaktformular vor Spam schützen



## Lektor21 (25. Januar 2008)

Guten Morgen nochmals!

Ich habe mal eine Frage. Ich möchte gern ein Formular vor Spam schützen! Nun meine Überlegung:

Reicht es einfach eine zufällige Zahl zu generieren, diese dann dem User anzuzeigen. Er muss dann die Zahl in ein Feld eingeben und dann prüfe ich, ob die beiden Zahlen übereinstimmen!? 

Reicht das oder ist das Quatsch und man kann das umgehen?


----------



## MiNiMaG (25. Januar 2008)

Grundsätzlich kann man alles umgehen, einfach nur einen Text abzutippen ist nicht gut, da das die Spam-Tools automatisch machen.

Wenn du es ganz simpel haben willst, mach solche Spielchen:
- Captcha Grafik
- 5. Buchstabe von "Eisenbahn" ?
- 17 + 8 ?

Geht natürlich nicht auf geschäftlichen Seiten
Da empfiehlt sich sowas  wie
- IP-Logging
- Session-Logging
- Registrierung mit Bestätigungsmail
- Versand erst nach Bestätigungsmail


----------



## Cherrywine (25. Januar 2008)

Captchas stellen derzeit die für Kontaktformulare (Emails, Kommentare in Blogs etc.) sicherlich die geeigneste Möglichkeit dar, sich gegen Spam zu schützen.
Zwar existieren bereits Ansätze, auch Captchas zu umgehen, diese sind aber noch nicht allzu verbreitet.

Der Aufwand mit einer Bestätigungsmail lohnt sich beim Einsatz in Blogkommentaren und Kontaktformularen wohl eher nicht, da dies einen erhöhten Aufwand für den User bedeutet und dieser sich den ggf. nicht antut.


Lieben Gruß
Cherrywine


----------



## pipip (25. Januar 2008)

ich kann dir das hier schon erwähnte addieren von zahlen sehr empfehlen...


----------



## canyon (8. April 2008)

Was haltet ihr von der Möglichkeit, den Text der eingegebenen Nachricht aus dem Formular einfach auf HTML-Tags zu prüfen. Ein "normaler" Nutzer wird niemals HTML verwenden, Spam enthalten hingegen z. B. meistens Links auf irgendwelche Seiten.


----------



## sasfed (8. April 2008)

Bei diesem Thema hat mir persönlich die Seite http://www.stoppt-den-spam.info/webmaster/captcha-tutorial/index.html sehr geholfen.


----------



## canyon (9. April 2008)

Bei der Seite wird vor allem auf Captchas eingegangen. Die möchte ich aber vermeiden bzw. als letzte Option verwenden. Es ist für Nutzer einfach nicht komfortabel, wenn sie zusätzlich noch einen evtl. schlecht lesbaren Textstring eingeben müssen.


----------



## Chaosengel_Gabriel (9. April 2008)

Ich möchte behaupten, dass folgendes die einfachste und schnellste Lösung ist...

```
<input type="hidden" name="nospam">
```

Dies im Formular integrieren und beim abschicken kontrollieren...
Da es hidden ist, kann ein einfacher User nichts dort eintragen...
Wenn jedoch ein SpamBot das Formular abschickt, dann füllt er ALLE Felder, also auch dieses hidden-Feld mit Inhalt...

Wenn also auf der nächsten seite in $_POST['nospam'] was drinne steht, dann isses nen SpamBot...


----------



## kuddeldaddeldu (9. April 2008)

Hi,



> Wenn also auf der nächsten seite in $_POST['nospam'] was drinne steht, dann isses nen SpamBot...



Aber ein ziemlich dämlicher. Ein hidden-Feld ist zu durchschaubar. Dann lieber ein normales Textfeld, das per CSS versteckt wird. Wird gerne als "honeypot" bezeichnet. Aber auch das ist nicht unüberwindbar, es soll Bots geben, die Formulare gleich mehrmals in verschiedenen Varianten ausfüllen.

LG


----------



## Chaosengel_Gabriel (9. April 2008)

Naja ich bin kein SpamBot und kann daher nicht beurteilen, wie einer handekt und so...
Aber man kann ja mehrere Möglichkeiten mit einander kombinieren...



> es soll Bots geben, die Formulare gleich mehrmals in verschiedenen Varianten ausfüllen.



Da würde ich z.B. die IP loggen... Und ne zeitliche begrenzung einbauen...
Verhindert zwar nicht, dass der Bot nochmal was schickt, aber immerhin kann er das Formular nich 30mal in 1min nutzen oder so...

Wenn man ganz gewitzt is könnte man evtl noch die Anzahl der Absendungen loggen, die durch die eine IP gemacht werden... Wenn dann in der Zeitlichen Begrenzung 20mal veruscht wird das Formular zu schicken, dann ist es vermutlich nen Bot und man sperrt die IP komplett...

Wäre zumindest mal ne Idee von mir ^^


----------



## canyon (9. April 2008)

Zu meinem Vorschlag, die Nachricht als Spam einzuordnen, wenn im Feld mit der Nachricht html-Tags enthalten sind (z. B. nach "<a" suchen --> Spam) habe ich noch keine Antworten bekommen. Bei den Spam-Mails, die ich über ein normales Kontaktformular bekommen habe waren zumindest eigentlich immer html-codierte Links enthalten, bei den sonstigen im Normalfall nie.

Was meint ihr?

Gruß


----------



## Chaosengel_Gabriel (9. April 2008)

Is theoretisch auch nen Gedanke, aber es kann ja acuh sein, dass ein User HTML-Code benutzt, wenn er dir über das Formular eine Mail schickt...
Erstrecht kann das sein, wenn du zum eingeben des Textes dem User einen Editor bietest, wie TinyMCE oder so...

Man sollte schon auf möglichkeiten zurückgreifen, die ein User NICHT beeinflussen kann (zB Text-Feld als hidden/mit CSS versteckt), da man dann daruf schließen kann, dass es nicht von einem einfachen User ist...


----------



## Dörti.Hermi (9. April 2008)

Hallo,

also ich verwende eigentlich nur Captchas. Du hast schon recht, das manche Captchas wirklich grausam sind und man sie 
wirklich nicht mehr lesen kann, aber man sollte hierbei einen guten Kompromiss zwischen Lesbarkeit und Spam-Bot-Sicherheit finden.

Hier gibts auch ein Tutorial dazu: http://www.tutorials.de/forum/php-tutorials/248923-php-einfacher-captcha-mit-gd2-und-freetype.html

Mfg Andi


----------



## chmee (9. April 2008)

Ich habe mir ein einfaches Rechen-Feld gesetzt und das hat geholfen, zB zu sehen unter bf2.phreekz.de. Und weiter oben die Aussage, Tags wären ein sicheres Zeichen für Spam - Nein, das denk ich nicht..

Noch einfacher kann man es sich mit einer eigenen Liste an Fragen machen.
Wieviele Räder hat ein Fahrrad / Der dritte Buchstabe von Tür / Wieviel ist 2x2 / etc..

mfg chmee


----------



## thoser (10. April 2008)

Eine andere Möglichkeit wäre den Browser eine Rechenaufgabe lösen zu lassen.
Also z.B. ein textfeld und ein Javascript das eine Rechenaufgabe löst welches anschließend das Ergebnis in das Feld einträgt.
Die Variante nutzt die Tatsache, das bots kein javascript beherrschen.
(Vor krzem las ich, das Wordpress diese Variante verwendet)


----------



## sasfed (10. April 2008)

Also meiner Meinung nach sind (lesbare) Captchas die beste und komfortabelste Möglichkeit. Bevor ich einen Benutzer zig unterschiedliche Rechenaufgaben stelle, mache ich lieber ein Captcha, dass man gut lesen kann und fertig. Wird ja auch bei immer mehr großen Webportalen eingesetzt.


----------



## Loomis (10. April 2008)

Rechenaufgabe ist etwas übertrieben. Ein 1+1 oder 1+2 reicht ja und das sollte niemanden überfordern.


----------



## Chaosengel_Gabriel (10. April 2008)

Bei ner Rechenaufgabe kann man aber nicht 100%ig ausschließen, dass nen Bot das kann...
Einfache Zahlen und Zeichen erkennen ist nicht schwierig...
Auch wenns in nem Bild ist... Bedeutet zwar für nen Bot nen hohen rechen Aufwand, aber wenn es einem darum geht seinen Spam um jeden Preis zu verbreiten...

Captcha sind da komfortabler und das im Vorfeld gepostete Tutorial dazu zeigt eine sehr leichte Version dessen, die auch gut leserlich ist...


----------



## chmee (10. April 2008)

@chaosengel : Ja, da geb ich Dir Recht. 

Die Frage, die sich mir stellt : Kommt ein Bot mit jedem Script klar ? Ich bin der Meinung, selbstgeschriebener Code mit einigen einfachen Mechanismen macht den Bot dumm und er kann nicht erfolgreich abschließen. Bots sind abgestimmt auf oft vorkommende Forms. Er kommt nicht weiter, wenn die Form nicht in sein Schema passt. Kann mich aber auch irren..

mfg chmee


----------



## soyo (10. April 2008)

Ich prüfe immer:

ob der Benutzer auch wirklich auf dem Formular war oder ob er nur die POST-Variablen sendet.
wie lange der Benutzer benötigt um das Formular auszufüllen und abzuschicken(Ich denke min. 3 Sekunden ist ein guter Richtwert)

Ansonsten hört sich das mit den JavaScript nicht schlecht an, was ist jedoch bei deaktivierten JavaScript?


----------



## Chaosengel_Gabriel (10. April 2008)

Die Idee is ja doch mal genial von soyo...

Der Bot kommt ja doch acuh nicht an den Code dran... Also zumindest nicht an den PHP Code, da der Bot ja nur das sieht, was auch der User sehen würde...

Und Grafiken auswerten, welche ja ein Capcha sind... Theoretisch geht es... Aber garantiert nich mit meinem Rechner ^^

JavaScript und andere clientseitige Variante halte ich eher für ungeeignet, denn alles was der Client bekommt, bekommt auch der Bot...


----------



## Bratkartoffel (10. April 2008)

Einfache Spambots oder Registrierungsbots füllen immer alle Felder eines Formulars aus. Mache zum Beispiel ein Zusatzfeld, welches du mit CSS unsichtbar machst. Wenn das Feld einen Wert hat, dann wars ein Bot.

Wäre eine zusätzliche Methode, aber alleine reicht das nicht aus.


----------



## chmee (13. April 2008)

Für die Interessierten : In der c't 09/2008 ist ein mehrseitiger Bericht zum Thema CAPTCHA, hier wohl der aussagekräftigste Link:

http://sam.zoy.org/pwntcha

mfg chmee


----------



## BadMatt (13. April 2008)

sry, falls es schon genannt wurde, war jetzt zu faul die erste seite zu lesen 

Aber ich mach das so: 
Captcha mit rechenaufgabe, oder nur rechenaufgabe (also ohne "bild"), und die lösung dazu muss man z.b. in ein feld names "hallohallo" eingeben (beispielname ).

Dann gibt es ein weiteres feld (unsichtbar) names "captcha", der bot füllt natürlich nicht das feld "hallohallo" mit der rechenaufgabe sondern "captcha". 

Dann einfach noch mit php nach dem abschicken überprüfen, ob das feld captcha voll ist, und das feld hallohallo nicht.

Was haltet ihr davon? 
Sinnfrei /  Sinnvoll ?


----------



## chmee (14. April 2008)

Interessant wäre es zB 3 Felder zu setzen, und anzugeben, in welches Feld die Antwort soll, die anderen sollen leer bleiben. In Anbetracht dessen, dass der Bot alles ausfüllen will, sollte er erstmal pauschal scheitern.

mfg chmee


----------

