Archiv verlassen und diese Seite im Standarddesign anzeigen : Captcha
feuervogel
02.02.2007, 07:54:34
Hallo,
ich bin durch einen Zufall neulich mal über die Captcha-klasse hn_captcha gestoßen (http://www.phpclasses.org/browse/package/1569.html)
Da ich doch arg erschrocken war wegen der grottenschlechten Implementierung (vor allem was die OOP-Grundsätze anbelangt), habe ich gedacht, ich könnte mich mal selbst versuchen.
Meine ersten Ergebnisse hängen als PDF an. Ich habe 5 Schwierigkeitsstufen, je Stufe 2 Captchas. Diese will ich noch auf 10 erhöhen, damit das ganze etwas feiner einstellbar ist.
Nun meine Frage: Was macht ein Captcha schwierig? Meine ersten Ansätze:
- Stärkeres Rauschen im Hintergrund
- Je näher sich die Farben von Schrift und Hintergrund sind, desto schwerer sind die Buchstaben zu erkennen
- Je unterschiedlicher groß die Buchstaben sind, desto schwerer
- Je mehr Farben im Spiel sind, desto schwerer
- Je stärker sich die Buchstaben drehen, desto schwerer ist es
- Je mehr Zeichen, desto schwerer
Was erschwert ein Captcha noch?
BenniG.
02.02.2007, 08:37:53
Hab leider kein Photoshop hier, sonst würd ich mal mit ein paar Filtern testen, wie gut man die Buchstaben isolieren kann..
Zu
Nun meine Frage: Was macht ein Captcha schwierig?
Würde ich noch hinzufügen:
-Wechselnde Hintergrundbilder, also kein Zufallsrauschen, sondern z.B. ein Backstein- oder Wolkenhintergrund, die darin enthaltenen Strukturen von den Buchstaben zu trennen ist für "uns" einfach, für einen Bot nicht. Bei den Hintergrundbildern gilt es möglichst viele zu haben und die vielleicht auch immer zu verschieben (damit man nicht sofort mit einer negativen Maske ansetzen kann)
-Unterschiedliche Schriftarten, nicht notwendigerweise im selben Captcha, aber wenn man z.B. 50 Schriftarten zur Verfügung hat und die mit 50 Hintergründen kombiniert kommt schon ne Menge an Variationsmöglichkeiten zusammen.
-Bezüglich der Farben ist es wahrscheinlich am Besten eine Farbe die genau so in einem Hintergrund vorkommt zu nehmen, damit ist es für Bots sehr schwierig, allerdings muss der Hintergrund dann auch stark strukturiert sein, damit dann die Buchstaben nicht untergehen.
Wichtig ist noch zu sagen, dass kein Captcha völlig automatisch geknackt werden kann, ein Bot muss immer "trainiert" bzw. angepasst werden auf das jeweilige Captcha, je mehr Variatonen man in das Captcha einbaut umso schwieriger ist das Training..
Generell hat es sich bei mir (speziell bei Gästebüchern) auch bewährt ohne Captcha auszukommen, z.B. wird ein Zufallswert sowohl in der Session gespeichert, als auch auf dem Formular ausgegeben und anschließend verglichen. Je nach Anwendung kann auch eine Wartezeit eingebaut werden, also dass das Formular frühstens nach 5sek abgeschickt werden darf.
De-Standardisierte Schriftarten
feuervogel
02.02.2007, 08:44:45
danke für die antworten!
das problem mit den schriftarten ist folgendes: ich brauche ja im prinzip nur die zeichen 0-9A-Z. jetzt ist es aber so, dass z.B. arial auf unicode ausgerichtet ist, somit sehr viele zeichen enthält und insgesamt 23 MB groß ist.
ich muss daher sowieso noch einige (freie) schriftarten finden, die ich verwenden kann, die nicht allzugroß sind, denn allein 200 mb webspace (bei 10 schriftarten) für ein blödes captcha hat nicht jeder :-)
BenniG.
02.02.2007, 08:50:10
arial auf unicode ausgerichtet ist, somit sehr viele zeichen enthält und insgesamt 23 MB groß ist.
Also meine arial.ttf ist grade mal 360kb groß..
Problematisch bei Captchas ist sowieso das eigentliche erstellen. Was soll man da benutzen? Es gibt GD in zich Versionen und sie ist auch nicht überall installiert.. Wenn man ohne GD-Lib arbeitet wird es sehr schnell sehr aufwendig..
BruceCompanys
02.02.2007, 12:00:02
Am besten nimmst du ne einfache Rechnung:
als Beispiel:
2*3 = ?
Da kommt nen Bot nich hinter, wie auch 1+1^^
BenniG.
02.02.2007, 13:07:20
Bei den Rechnungen muss man aber auch aufpassen.. Eine mathematische Formel auszuwerten fällt einem Rechner leichter als einem Menschen ;)
Nach den Erkenntnissen der Pisa-Studie muss man mit sowas eh vorsichtig sein ;)
BruceCompanys
02.02.2007, 15:04:57
;-)
Ich weiß wenn die Pisa befragt hat... aber mich net *fg*
Ich kann schon 1+1 rechnen (wenn es bei mir auch 3 ergibt...*rolf* mein lehrer hat gesagt es gibt 2 punkt, da muss man auch net denken ^^)
Desweiteren ne Machine muss erstmal dahinter kommen ob es ne rechnung ist oder nicht deshalb im Hintergrund noch nen paar / einbauen und -; + etc... aber so abgeschottet das man es von der eigentlichen Rechnung als Mensch erkennt^^
feuervogel
02.02.2007, 16:13:25
;-)
Ich weiß wenn die Pisa befragt hat... aber mich net *fg*
Ich kann schon 1+1 rechnen (wenn es bei mir auch 3 ergibt...*rolf* mein lehrer hat gesagt es gibt 2 punkt, da muss man auch net denken ^^)
sorry, aber diesem teil deines postings kann ich keinen sinn entnehmen.
feuervogel
02.02.2007, 16:16:47
nähmen wir mal an, wir geben dem computer eine rechnung zu knacken. diese sollte sich im ganzahligen maximal zweistelligen bereich befinden, sagen wir von 1 bis 20. dann muss ein computer bloß so lange 10 raten, bis er richtig liegt...und selbst wenn wir von 1 bis 100 rechnen müssen, dann ist die wahrscheinlichkeit immer noch zu groß, dass der computer einfach so auf die lösung kommt. und wenn ich mancher leute mathekenntnisse betrachte, bezweifle ich, dass das wirklich sinnvoll ist.
feuervogel
02.02.2007, 17:09:18
so, ich hab mal ein wenig rumgespielt :-)
http://www.julianmoritz.de/dl/captcha.pdf
Andes
02.02.2007, 19:08:03
Diese dürften aber noch relativ leicht für eine Maschine zu entschlüsseln sein. Soweit ich weiß lässt sich dies noch über Farbfilter und Konturerkennung leicht nach vollziehen.
Ich denke mal, dass es besser wäre den Text mit einem Muster zu überlagern, welches dieselbe Farbe wie der text hat. Oder die Farbe des Hintergrunds hat.
Bei Beiden würde eine Konturerkennung nicht funktionieren. Bei dem mit gleicher Farbe wie Text würde kein Sinnvoller Text entstehen und bei dem mit der Hintergrundfarbe wären die Konturen offen.
Hab mal zwei angehängt, wo ich denke, dass es für Maschinen sehr schwer sein sollte.
Kann mich aber auch täuschen, da ich mich mit dem Thema noch nicht so auseinander gesetzt habe.
Bilder (http://airbrush-bayern.de/forum_archive/selfphp/bilder.html)
feuervogel
02.02.2007, 21:49:27
prima, dann werde ich wohl noch ein paar streifen malen müssen...aber das erst morgen.
danke für den tipp :-)
ich finde das linke als mensch übrigens leichter zu lösen.
feuervogel
02.02.2007, 23:19:41
die neuste version:
http://www.julianmoritz.de/dl/captcha2.pdf
Opendix
03.02.2007, 00:51:07
von mir au sgesehen, ist der hintergrund einfach noch zu fest von der Oberfläche zu unterscheiden...
feuervogel
03.02.2007, 15:28:50
von mir au sgesehen, ist der hintergrund einfach noch zu fest von der Oberfläche zu unterscheiden...
hm, sowas müsste sich wahrscheinlich einfach in nem praxistest zeigen.
ich hab die klasse mal online gestellt
http://nopaste.php-q.net/273180
kommentare sind willkommen!
beispielaufruf:
<?php
require_once( './classes/Captcha.class.php' );
$c = new Captcha( $_GET[ 'id' ] );
$c->setSecurityLevel($_GET[ 'level' ]);
$c->addFont( '/usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterBold.ttf' );
$c->addFont( '/usr/share/fonts/truetype/ttf-lucida/LucidaBrightDemiBold.ttf' );
$c->addFont( '/usr/share/fonts/truetype/ttf-junicode/Junicode-Italic.ttf' );
$c->addFont( '/usr/share/fonts/truetype/ttf-lucida/Junicode-Bold.ttf' );
$c->addFont( '/usr/share/fonts/truetype/ttf-lucida/Junicode-Regular.ttf' );
$c->show();
?>
Opendix
03.02.2007, 16:26:29
öhm... warum setzt du die werteim Konstruktor und nicht gleich beim initialisieren der variabeln?
Hat man dadurch irgendeinen vorteil? :S
ich denke diese 7 zeilen könntest du dir sparen...
feuervogel
03.02.2007, 16:47:33
öhm... warum setzt du die werteim Konstruktor und nicht gleich beim initialisieren der variabeln?
Hat man dadurch irgendeinen vorteil? :S
ich denke diese 7 zeilen könntest du dir sparen...
hm, hab ich mir so angewöhnt - vom javaprogrammieren kommt das glaub ich.
Schon mal nicht schlecht. In deiner letzten PDF:
Je weiter man nach unten geht, desto kniffliger wird es. Die letzte Zeile kann man fast gar nicht mehr lesen, nur noch erahnen.
Würde aber auch einen bunten Hintergrund nehmen, so verschwimmen die Buchstaben/Zahlen noch besser.
feuervogel
05.02.2007, 12:33:17
Schon mal nicht schlecht. In deiner letzten PDF:
Je weiter man nach unten geht, desto kniffliger wird es. Die letzte Zeile kann man fast gar nicht mehr lesen, nur noch erahnen.
stimmt, in der ersten zeile steht security-level auf 1, in der letzten auf 10 :-)
Würde aber auch einen bunten Hintergrund nehmen, so verschwimmen die Buchstaben/Zahlen noch besser.
der hintergrund ist eigentlich bunt, nur hat jedes pixel eine andere farbe, deswegen verschimmen die wohl ein wenig...
feuervogel
11.02.2007, 12:07:33
so, ich hab mal eine neue version der klasse hochgeladen:
http://nopaste.php-q.net/274928
sie ist nun getestet und funkioniert sogar :-)
meikel
11.02.2007, 17:19:38
der hintergrund ist eigentlich bunt, nur hat jedes pixel eine andere farbe, deswegen verschimmen die wohl ein wenig...
Wen interessiert denn der Hintergrund? Bei OCR wird der Hintergrund überhaupt nicht beachtet, weil die Schrift vektorisiert wird. Du mußt den Kurvenverlauf der Schrift an zufälligen ausgewählten Stellen unterbrechen, so daß das Zeichen nicht komplett vektorisiert werden kann. Farbige Effekte bringen fast nix, weil das Bild am Schluß auf 2 Farben (schwarz und weiß) reduziert wird. Und dann wird vektorisiert...
Es kommt also nicht darauf an, wie schwer ein Mensch das Captcha entziffern kann, sondern wie groß die Fehlerrate eines darauf angesetzten OCR Programms ist.
Madokan
12.02.2007, 07:45:54
@meikel: Ich schleiche mich nur ganz kurz mal dazwischen. Der Einwand ist sicher gerecht fertigt, nur finde ich die aktuell vorliegende Version von julian lässt sich dahin gehend sicher ausbauen. Was mir besonders gut gefällt ist das optimierte Design der Klasse. Betrachtet man sich im Vergleich dazu die hn_captcha-Klasse ist das in meinen Augen ein Unterschied, wie Tag und Nacht.
Mehr wollte ich garnicht los werden.
Liebe Grüße,
Matze K.
feuervogel
12.02.2007, 09:54:09
Wen interessiert denn der Hintergrund? Bei OCR wird der Hintergrund überhaupt nicht beachtet, weil die Schrift vektorisiert wird. Du mußt den Kurvenverlauf der Schrift an zufälligen ausgewählten Stellen unterbrechen, so daß das Zeichen nicht komplett vektorisiert werden kann. Farbige Effekte bringen fast nix, weil das Bild am Schluß auf 2 Farben (schwarz und weiß) reduziert wird. Und dann wird vektorisiert...
Es kommt also nicht darauf an, wie schwer ein Mensch das Captcha entziffern kann, sondern wie groß die Fehlerrate eines darauf angesetzten OCR Programms ist.
Naja, einerseits begründe ich dieses unwissen mit meiner unkenntniss bezüglich OCR-software, aber vielen dank für den Hinweis.
Jedoch denke ich, dass es keine rolle spielt, ob ich den kurvenverlauf der schrift mit dem vordergrund oder mit dem hintergrund unterbreche. also wenn die unterbrechung aus einer linie besteht und diese linie die gleiche farbe wie der buchstabe hat, ist es ja egal, ob die linie im vordergrund oder im hintergrund ist.
zudem kann jeder, wie madokan schon sagte, sich die klasse anpassen. kommentier den hintergrund-teil einfach aus :-)
meikel
12.02.2007, 10:25:33
Jedoch denke ich, dass es keine rolle spielt, ob ich den kurvenverlauf der schrift mit dem vordergrund oder mit dem hintergrund unterbreche.
Mach das mal:
druck etwas Text auf weißes Papier, verunstalte den Text etwas mit nem weißen Korrekturstift, scann das Ergebnis wieder ein und laß Deine OCR Software ran...
Im Ergebnis reicht es ja aus, wenn ein Zeichen nicht korrekt erkannt wurde.
Es geht bei der ganzen Aktion ja nicht darum, wie gut die Augen des Users sind, sondern darum, wie fehleranfällig das OCR eines SPAM Bots arbeitet.
feuervogel
12.02.2007, 10:27:01
Mach das mal:
druck etwas Text auf weißes Papier, verunstalte den Text etwas mit nem weißen Korrekturstift, scann das Ergebnis wieder ein und laß Deine OCR Software ran...
Im Ergebnis reicht es ja aus, wenn ein Zeichen nicht korrekt erkannt wurde.
mir fehlt dreierlei: ocr-software, weißer korrekturstift und scanner :-) aber vielleicht lassen sich die letzten beiden ja am rechner nachbilden, und die software müsste auch installierbar sein.
feuervogel
12.02.2007, 10:42:25
so, ich hab mir mal die ersten 5 sicherheitsstufen als png gespeichert und gocr drüber laufen lassen. das ist eine ocr-software. erfolg siehe im anhang :-)
meikel
12.02.2007, 13:27:51
so, ich hab mir mal die ersten 5 sicherheitsstufen als png gespeichert und gocr drüber laufen lassen. das ist eine ocr-software.
Mal sehen, was ich noch rumliegen habe. Bei Kauf eines Scanners wird ja meist ein mehr oder weniger gutes OCR Programm mitgeliefert.
erfolg siehe im anhang :-)
Wie Du siehst, reicht s1.png völlig aus:
ein Zeichen nicht erkannt -> "Du kommst hier net rein!"
Der Fehler wird nicht falscher, wenn der Bot statt 1 Fehler 2 Fehler produziert. <g>
@Madokan:
meine Bemerkungen bezogen sich auf das Prinzip und nicht auf Feuervogels PHP Klasse.
Madokan
12.02.2007, 13:31:24
@meikel: So hatte ich es auch verstanden. Wollte nur mal beiläufig ausdrücken, dass ich die aktuelle Version gelungen finde! :)
Liebe Grüße,
Matze K.
BruceCompanys
21.03.2007, 20:57:28
Kurze Frage,
darf ich deine Captcha für mein Guestbook benutzen, das dann von mir als freie software angeboten wird ;-)
geht das in ordnung
apropos: was soll mir das sagen?
Die Grafik "http://localhost/guestbook/captcha.php" kann nicht angezeigt werden, weil sie Fehler enthält.
Ich hab level, chars, width, height definiert, wo liegt da jetzt dat prob
feuervogel
21.03.2007, 21:11:57
Kurze Frage,
darf ich deine Captcha für mein Guestbook benutzen, das dann von mir als freie software angeboten wird ;-)
geht das in ordnung
klar, tue damit was du willst.
feuervogel
21.03.2007, 21:14:20
das ist im übrigen die aktuelle version:
http://rafb.net/p/8B3rmf61.html
xabbuh
21.03.2007, 21:28:38
apropos: was soll mir das sagen?
Die Grafik "http://localhost/guestbook/captcha.php" kann nicht angezeigt werden, weil sie Fehler enthält.
Wenn du in Zeile 112 den Aufruf von header() auskommentierst, solltest du aussagekräftigere Fehlermeldungen erhalten.
BruceCompanys
22.03.2007, 13:45:43
Hat sich mit der "neuen" Version erklärt ;-)
Danke
mfg
Opendix
25.06.2007, 11:06:04
@feuervogel
Ich würde gerne bei meiner Seite auch captchas einbauen.. da du ja hier beriets ne gute Klasse gebaut hast, muss ich nicht nochmals das Rad neu erfinden ;)
Könntest du diese (falls man die verwenden darf) irgendwo hochstellen? Dein Link da oben funktioniert leider nicht mehr...
feuervogel
26.06.2007, 13:32:50
@feuervogel
Ich würde gerne bei meiner Seite auch captchas einbauen.. da du ja hier beriets ne gute Klasse gebaut hast, muss ich nicht nochmals das Rad neu erfinden ;)
Könntest du diese (falls man die verwenden darf) irgendwo hochstellen? Dein Link da oben funktioniert leider nicht mehr...
Ja, werde ich die Tage mal machen - momentan stecke ich im Stress...
feuervogel
26.06.2007, 13:33:36
ah, da: www.julianmoritz.de/dl/captcha.zip müsste recht umfangreich sein...
Opendix
26.06.2007, 14:12:10
super.. ich schau mir das mal an.. Danke :)
vBulletin® v3.8.3, Copyright ©2000-2012, Jelsoft Enterprises Ltd.