HTML Sogenannte Bots erkennen

Schumiel

Lieutenant
Registriert
Jan. 2010
Beiträge
846
Hallo,

ich möchte gern über mein vorhandenes HTML-Formular (form, input, textarea, usw.) sogenannte Bots erkennen lassen. Ich habe zwar ein Captcha, aber mein Gefühl sagt mir, dass es schon längst geknackt wird. Ich bin auch zufrieden damit und möchte es weiter behalten, und eben nur einmalig selbst andere Erkennungsmöglichkeiten ausprobieren.

Gibt es dafür Erkennungsmöglichkeiten, die nur in wenigen Minuten zu programmieren sind? Einfach testweise. Über Tipps oder Quellen würde ich mich sehr freuen.
 
Meiner Meinung nach ist reCaptcha die sicherste Möglichkeit, allerdings auch für den Benutzer zum Teil schwer zu lösen. Ab und zu braucht man mehrere Versuche :(
 
Auch das wurde schon geknackt. Ich suche, wie beschrieben, andere Möglichkeiten.

Nochmal, mein Ziel ist nicht, die Bots dauerhaft zu verhindern, sondern nur zu checken, wie viel aktuell durchgeht. Lässt sich da nicht über den input-Namen etwas machen? Oder gibt's andere weitere Tipps?
 
Honeypot-Formularfelder sind n netter Weg.
Schreib ein Formularfeld, das total keinen Sinn ergibt. Gib dem Feld ein Display:none. Jeder, der jetzt noch das Feld ausfüllt, ist mit extrem hoher Wahrscheinlichkeit ein Bot.

Ansonsten gibt es sehr wohl Captchas, gegen die noch kein Kraut gewachsen ist. Ich denk da nur an die extrem einfach gestrickten Captchas von Contao. Simpel, aber wirkungsvoll... oder hast du schon mal einen Bot gesehen, der natürliche Sprache versteht und zusätzlich noch die Grundrechenarten beherrscht? Die sind doch alle nur auf Bild- und Mustererkennung getrimmt.
 
Ein nicht unkluger Ansatz in purem HTML & CSS wäre aber:
Code:
<style type="text/css">
	form .plz {
		position: absolute;
		top: -10000px;
		left: -10000px;
	}
</style>
<form>
	<div class="vorname">
		<label>vorname</label>
		<input name="vorname">
	</div>
	
	<div class="nachname">
		<label>nachname</label>
		<input name="nachname">
	</div>
		
	<div class="plz">
		<label>plz</label>
		<input name="plz">
	</div>
	
	<input type="submit">
</form>
Du schickst einfach (evtl. mehrere) Formularfelder außerhalb des Sichtbereichs des Nutzers, die ein Bot mit Sicherheit ausfüllen würde, du aber natürlich nicht benötigst. Prüfst auf dem Server dann eben nur, ob hier das Feld "plz" leer ist. So lange der Bot kein CSS auswertet, sollte das so weit gut klappen.
 
Rechnen können manche Bots sehr wohl. CSS meiner Erfahrung nach (noch) wenige und damit spart man dem Anwender das (lästige) Ausfüllen eines Feldes. Was trotzdem noch durchkommt, lässt sich fast immer ausfiltern. Z.B. weil mehrere Links verschickt werden. I hate Captchas...
 
der Vorschlag von Yuuri haben wir auch zig Mal im Einsatz und der funktioniert sehr gut, selbst display:none von entsprechenden "Test" Form-Elementen reichte bisher aus. Unschön ist dass die Lösung mit dem position:absolute nicht so ganz Barrierefrei ist.
 
Zuletzt bearbeitet:
Captchas, besonders reCaptchas vertreiben eher die User und nicht die Bots :D

Halte eine reine CSS Lösung auch für die Beste.
 
Habe aktuell so ein Problem mit einem Forum.
reCaptcha kannste imo knicken, es macht keinen Unterschied ob es ein- oder ausgeschalten ist, Spambots ohne Ende.
Nur eigens definierte Fragen + Antworten bringen Abhilfe, diese dürfen aber auch nicht zu einfach sein. Wenn man z.B. in einem Satz nach dem Präsidenten der USA oder der Hauptstadt von Frankreich fragt, so registrieren sich auch Spambots ohne Ende.
 
Ich würde auch die Variante mit dem versteckten Eingabefeld probieren. Bei mir hat es noch nicht ein Bot geschafft, das richtig zu machen. Außerdem bemerken es die richtigen Benutzer nicht einmal. Um die Erfolgsaussichten noch zu verbessern, könntest du statt die CSS Parameter des input fields zu ändern, das Feld in ein div-Element legen und das div dann verstecken oder verschieben.

Eine wohl noch etwas bessere Alternative: Du lässt das Dummy-Feld unangetastet und ziehst das nächste, dann wieder echte Feld auch per CSS um eine "Zeile" nach oben und überdeckst so das Dummy-Feld. So kann auch nicht einfach mittels durchlaufen aller Elternelemente herausgefunden werden, ob das Dummy-input unsichtbar ist. Es müsste dann schon richtig gerendert werden.
 
Eure Antworten sind alle Richtig, aber erfüllen nicht mein Problem. Das liegt aber auch an meiner etwas ungenauen Erklärung.

Und zwar glaube ich, das meine Nutzer (mit Accounts) extra für mein Formular, was sie mehrmals täglich nutzen, ein Programm geschrieben haben. Um meine Vermutung zu prüfen, möchte ich dies gern prüfen. Da helfen eure Tipps leider nicht, weil es keine gewöhnlichen Bots sind, sondern spezifische auf meine Webseite bezogen.

Sorry, für die ungenauen Angaben.
 
Dann änder das Formular doch leicht ab, dann müssten die Bots umgeschrieben werden.
 
Schwierig zu sagen, mir ist noch nicht ganz klar wie du das meinst.
Deine "Kunden" schreiben extra für deine Website nen Bot ?
 
Ja, vermute ich, weil andere Nutzer es den anderen vorwerfen. Es handelt sich hier um ein zeitlich basiertes Browsergame. ;) Da kann so ein Bot schon Sinn machen, wenn man nicht Tag und Nacht am PC sein möchte, um Erfolg zu haben.
 
Dann würde ich es so machen, dass du für jedes Form erstmal einen Wert erzeugst und den samt timestamp und einem weiteren wert "used" in die Datenbank schreibst und gleichzeitig als hidden field mitsendest (evtl. auch nur den hash davon). Beim Absenden des Formulars überprüfst du dann, ob der Wert (bzw der hash) in der Datenbank existiert und ob das used-flag den wert 0 oder "nein" aufweist. Wenn das der Fall ist, setzt du für den gefundenen Eintrag den wert auf 1 bzw. "ja".

So muss für jede Registrierung immer schon einmal auch das Formular erneut abgerufen werden, um an den Wert zu kommen. Das heißt die Bots müssten zumindest angepasst werden. Dann kannst du noch prüfen, ob genug Zeit zwischen dem Ausliefern des Formulars und dem Absenden vergeht. Solange du den Benutzer nicht direkt damit konfrontierst, sondern die Information erstmal für dich behältst, dass als Bot erkannt wurde (indem du ihn nicht direkt aussperrst), kannst du erstmal ein paar Informationen sammeln. Das klappt natürlich nur, solange er nicht daran denkt, den Bot so zu programmieren, dass dazwischen eine gewisse Zeit verstreicht. Weiterhin kannst du so später die Anzahl der Registrierungen pro Minute einschränken.

Weitere Möglichkeit wäre halt eine Emailverifizierung, Login über Facebook o.ä., Angabe des Bankkontos, Funktionen des neuen ePA, Mehrfaches Anmelden mit einer IP begrenzen. Dadurch können die Registrierungen aber immer nur eine gewisse Anzahl eingeschränkt werden. Auch wird es schon wieder aufwändig und ob das machbar ist, hängt stark von deiner Anwendung ab. Außerdem schreckst du damit auch schnell echte Nutzer ab.

Es ist insgesamt halt schwer das komplett zu unterbinden, da zu viel im Browser bzw. vom Client beeinflusst werden kann. Es bleibt eine Kosten/Nutzung-Rechnung auf beiden Seiten (Betreiber und Bot-Nutzer/-Programmierer). Bei einem Onlinespiel, bei dem jeder zusätzlicher Account hilft, ist die Grenze bis es sich nicht mehr lohnt wohl sehr hoch. Evtl. wäre in so einem Fall aber eine Anpassung der Spielmechanik möglich, damit das keine so großen Auswirkungen mehr hat.
 
Eine der einfacheren Methoden: Prüf den User Agent.
Je nachdem, wie gut deine Botter sind werden sie evtl. nur StiNo-Useragents mitschicken, oder gar keine. Oder du hast so tolle UAs wie "Java/1.6"...
 
@Daaron: Der User Agent ist manipulierbar. ;) Das bringt mir gar nichts und ist locker im Bot mit einbaubar, indem man einen normalen User Agent überliefert. Selbst Desktop-Bildschirmbreiten logge ich. Aber auch diese sind mit diversen Kenntnisse manipulierbar. Alles, was ein Webmaster speichert, ist durch Nutzer änderbar, wenn man das Wissen dazu hat. Daher ist dies nur feststellbar, wenn man einmalig eine Sache ändert oder der erste Absatz von redeye86 ist auch nicht schlecht.

Ich weiß halt auch nur davon, das man die namen-tags Bezeichnung im Form-Tag ändern kann, bevor man den Nutzer auf seiner Seite erwartet, weil ein bestimmtes wiederkehrendes Spielereignis stattfindet. Ich suche aber noch nach weiteren Hinweisen. :)
 
Hi,

ganz ehrlich: wenn du der Ansicht bist dass

a) Captchas und reCaptchas bereits geknackt wurden
b) deine Nutzer genügend "kriminelle" Energie in sich haben, um einen Bot zu schreiben und
c) das ganze genau auf deine Webseite zugeschnitten machen

dann hast du ganz wenige Möglichkeiten. Wenn du die Name-Tags anpasst passen die User eben Ihren Bot an. 5 Minuten Arbeit im schlimmsten Fall.

Man sollte einfach solche Nutzer vom Spiel ausschließen und fertig. Eine technisch 100% wasserdichte Lösung gibt es für einen speziell auf ein Ziel geschrieben Angriff schlicht nicht.

VG,
Mad
 
Madman1209 schrieb:
dann hast du ganz wenige Möglichkeiten. Wenn du die Name-Tags anpasst passen die User eben Ihren Bot an. 5 Minuten Arbeit im schlimmsten Fall.

Man sollte einfach solche Nutzer vom Spiel ausschließen und fertig.

Richtig, sie hätten es in 5 Minuten wieder geändert. Dazu würde es aber nicht kommen, da ich sie durch die Kenntnis, das sie ein Bot besitzen, wie du sagst, aussperren würde. Daher meine Frage hier. ;)
 
Zurück
Oben