• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[HOW-TO/TUTORIAL] wirksamer Schutz vor Bots ohne Captcha o.ä.

J

j-l-n

Guest
Es gibt zwei einfache, aber wirkungsvolle Methoden, automatisierte Bots in einem Formular zu blockieren - und das, ohne auf für den Nutzer Mehraufwand bedeutende Techniken wie Captchas zu setzen:

1. Man fügt dem Formular ein neues Textfeld hinzu mit einem Namen wie "message", "username" o.ä., was deswegen von einem Bot garantiert ausgefüllt wird.
HTML:
<input type="text" name="message" id="bot-protection">
Nun macht man dieses per CSS für einen normalen Menschen unsichtbar:
Code:
#bot-protection{
 opacity: 0;
}
Vorteil gegenüber Alternativen wie <input type="hidden"> ist, dass Bots nicht erkennen, dass das Feld nicht ausgefüllt werden soll.
Man braucht nun serverseitig nur noch prüfen, ob das Feld leer und damit das Formular höchstwahrscheinlich von einem Menschen abgeschickt worden ist.

2. Trick: Es wird ein Formularfeld mit der Zeit der Erzeugung mitgeschickt.
PHP:
<input type="hidden" name="token" value="<?php echo time(); ?>">
Auf dem Server prüft man dann mittels
PHP:
$token = $_POST['token'];
$difference = time() - $token;
, wie schnell das Formular abgeschickt wurde. Kommen hier Werte von wenigen Sekunden heraus, kann man sich relativ sicher sein, dass nur ein automatisiertes Programm das Formular so schnell ausfüllen kann.
 
Es gibt noch eine Methode: den Namen der <input>s zufällig wählen und in der Session speichern, welcher Name für was steht.

Aber alle Methoden bringen natürlich nur was bei generellen Bots. Bots, die spezifisch für eine Seite/ein Formular geschrieben wurden, kann man damit natürlich nicht aufhalten/erkennen.
 
Es gibt noch eine Methode: den Namen der <input>s zufällig wählen und in der Session speichern, welcher Name für was steht.
Auch eine gute Idee...

Aber alle Methoden bringen natürlich nur was bei generellen Bots. Bots, die spezifisch für eine Seite/ein Formular geschrieben wurden, kann man damit natürlich nicht aufhalten/erkennen.
Ja, natürlich. Das ist (leider) wahr. Aber ich glaube kaum, dass jemand sich die Mühe macht, für z.B. kleine, private Seiten einen extra Bot zu schreiben.


PS: generelle Frage: die meisten Bots speichern keine Cookies, bin ich da richtig informiert?
 
Formularschutz per Javascript ist nach meinen Erfahrungen relativ sicher, da viele Bots kein Javascript ausführen können.
Methode 4:
Ein hiden-input per Javascript dynamisch erstellen und mit einer serverseitigen gelieferten zufälligen Information füllen.

Dies zusammen mit weiteren (u.a. den oben von julian beschriebenen Methoden) wird hier beschrieben und wurde zuvor bereits hier im Forum diskutiert: Konzept zum Formular-Spamschutz.
 
PS: generelle Frage: die meisten Bots speichern keine Cookies, bin ich da richtig informiert?
Ich denke schon, dass die Cookies für eine gewisse Dauer speichern. Sonst könnten die Bots sich ja bei manchen Sachen gar nicht anmelden.

Formularschutz per Javascript ist nach meinen Erfahrungen relativ sicher, da viele Bots kein Javascript ausführen können.
Damit bekommst du aber viele falsch-negative. Z.B. ich würde dann als Bot eingestuft werden, da ich JS standardmäßig deaktiviert habe - und zwar v.A. aus Sicherheitsgründen.
Also ich halte davon nicht besonders viel. Und es ist nicht wirklich schwer einen Bot zu erzeugen(z.B. mit irgendeinem der vielen Automatisierungaddons für den Firefox), der JS interpretiert...

Ich denke am Besten ist eine Kombination aus mehreren mit einer geeigenten Gewichtungsmetrik liefert die besten Ergebnisse (am besten noch mit einem flexiblen und lernenden Algorithmus).
 
Damit bekommst du aber viele falsch-negative...
Viele?
In der Realität geht doch ohne Javascript oftmals gar nichts mehr. Wenn man diesen Zahlen trauen kann, ist bei ca. 1% Javascript deaktiviert, davon nur jeder 5. der JavaScript bewusst deaktiviert hat.
Davon ist bestimmt ein großer Teil Entwickler, welche mit Tools wie NoScript arbeiten und für eine Seite Javascript mit einem Klick aktivieren können. :)

LG jspit
 
Ich denke schon, dass die Cookies für eine gewisse Dauer speichern. Sonst könnten die Bots sich ja bei manchen Sachen gar nicht anmelden.

Dann kann man ja auch einfach noch etwas wie
PHP:
session_start();

$fehlerhafte_versuche = $_SESSION['versuche'];
if(empty($fehlerhafte_versuche)){
   $fehlerhafte_versuche = 0;
}
$fehlerhafte_versuche = $fehlerhafte_versuche + 1;

if($fehlerhafte_versuche > 10){ //z.B. max 10 fehlerhafte Versuche
   die("zu viele fehlerhafte Versuche!");
 }
$_SESSION['versuche'] = $fehlerhafte_versuche;
hinzufügen...
 
Hi,
hab noch eine exotische Variante, die jedoch nicht für barrierearme Anwendungen nutzbar ist.
Dafür wird eine Grafik für einen Absendebutton angefertigt, welcher einen transparenten Rahmen hat.
Anstelle des normalen Submit-Buttons wird ein Button vom Typ image genommen.
Klickt der Nutzer nun zum Absenden auf den Grafikbutton, dann werden die relativen Koordinaten mitgeschickt.
Diese Koordinaten werden auf der Serverseite ausgewertet und sollten aus dem sichtbaren Bereich des Button sein
sowie nicht immer gleich.

LG jspit
 
jspit, kann man damit noch sicherstellen, dass das <form> als "vom Mensch" abgesendet gilt, wenn man in einem beliebigen Feld Enter drückt?
 
Enter liefert immer die Koordinaten 0,0. Das entspicht der linken oberen Ecke der Grafik, also im transparenten Rahmen. Ob man dies zulässt, ist Sache des Programmieres der die Koordinaten auswertet. Ich persönlich würde Enter nicht als gültig zulassen.
 
Ich wüsste nicht wie, da dann immer die Position (0,0) mitgesendet wird... außer man hat vor dem <input type="image"> noch einen anderen Submitbutton.

Und damit würde ich wieder als Bot dastehen, da ich den Submitbutton meistens nicht verwende, sondern Enter.

- - - Aktualisiert - - -

@jspit: hab' gerade erst deinen neuen Beitrag gesehen. Das würde ich auf keinen Fall machen. Damit reduzierst du die Benutzerfreundlichkeit dramatisch.
 
Ja, wollte ich auch gerade sagen, Korbinian. Man muss keine 50 Jahre alt sein um ein Tastatur-Freak zu ein. Und solche "verpfuschten" Formulare sind dann ein Grauen :)
 
Ist mir schon klar, dass dieser Vorschlag schon stark in die Richtung der "benutzerfreundlichen" Captchas geht.
 
Ist mir schon klar, dass dieser Vorschlag schon stark in die Richtung der "benutzerfreundlichen" Captchas geht.
Ich finde ihn persönlich sogar schlimmer, aber auf ne andere Weise. Denn bei Captchas weiß ich wenigstens, dass ich diese ausfüllen muss. Aber dass ich das Formular nicht mit Enter abschicken darf, weiß ich eben nicht...
 
Ich bin ja ein Fan von captchalosen Formularen...

Man könnte die ganzen passiven Detektionsmethoden (also dass der Benutzer nichts machen muss) zusammenfassen, dann über einen lernenden Algorithmus die Klassifizierung machen und wenn der sagt "Das ist vielleicht ein Bot." noch ein Captcha hinterher schieben. Mit der Information, ob das Captcha gelöst wurde, kann man dann den Algorithmus weiter lernen lassen.
 
Zurück
Oben