Christian Bliß: CAPTCHA so in Ordnung?

0 50

CAPTCHA so in Ordnung?

Christian Bliß
  • meinung
  1. 0
    Klawischnigg
    1. 0
      Christian Bliß
  2. 0
    _roro
    1. 0
      Christian Bliß
      1. 0
        _roro
        1. 1
          Christian Bliß
          1. 0
            _roro
            1. 0
              Christian Bliß
              1. 0
                Rouven
                1. 0
                  Christian Bliß
                  1. 0
                    Rouven
                    1. 0
                      Christian Bliß
                      1. 0
                        Marc Reichelt
              2. 0
                _roro
  3. 0
    Henrico Hamstar
    1. 0
      Christian Bliß
      1. 0
        Henrico Hamstar
  4. 0
    Gunnar Bittersmann
    1. 0

      CAPTCHAs: niemand will sie, viele haben sie - Alternativen?

      Marc Reichelt
      1. 0
        Jeena Paradies
        1. 0
          Marc Reichelt
      2. 1
        Schuer
      3. 0
        Maxx
        1. 0
          Jonathan
        2. 0
          Struppi
      4. 0
        Tim Tepaße
        1. 0
          Jonathan
          1. 0
            Maxx
            1. 0
              Jonathan
              1. 0
                Tim Tepaße
                1. 0
                  Jonathan
    2. 0
      Christian Bliß
      1. 0
        Gunnar Bittersmann
        1. 0
          Jonathan
  5. 0

    Btw...

    _roro
    1. 0
      Marc Reichelt
      1. 0
        _roro
        1. 1
          Marc Reichelt
    2. 1
      Siggi
      1. 0
        Henrico Hamstar
        1. 0
          Siggi
          1. 0
            Mathias Brodala
    3. 0
      Henrico Hamstar
  6. 0
    Jonathan
    1. 0
      Christian Bliß
      1. 0
        Jonathan
        1. 0
          Christian Bliß
          1. 0
            Jonathan
      2. 0
        Længlich

Hallo,

hat jemand von euch Erfahrung was CAPTCHAs angeht? Es ist ja bekannt, dass viele Spambots diese Sicherheitsvorkehrung umgehen können.

Ich habe das hier programmiert: http://www.medienzensur.de/cgi-bin/gd/gd.pl

Meint ihr, das taugt was oder kommt ein Bot schnell hinter das System und kann die Buchstaben und Zahlen auslesen?

Gruß
Christian Bliß

--
Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
  1. Hi there,

    Meint ihr, das taugt was oder kommt ein Bot schnell hinter das System und kann die Buchstaben und Zahlen auslesen?

    Optisch sehr ansprechend. Darf ich ein Programm schreiben, das Deine Captchas sammelt? ;)

    1. Hallo,

      Optisch sehr ansprechend. Darf ich ein Programm schreiben, das Deine Captchas sammelt? ;)

      Es soll ja auch nicht schön sein, sondern funktionell :)

      Gruß
      Christian Bliß

      --
      Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
  2. Hallo,

    hat jemand von euch Erfahrung was CAPTCHAs angeht? Es ist ja bekannt, dass viele Spambots diese Sicherheitsvorkehrung umgehen können.

    Ich habe das hier programmiert: http://www.medienzensur.de/cgi-bin/gd/gd.pl

    Meint ihr, das taugt was oder kommt ein Bot schnell hinter das System und kann die Buchstaben und Zahlen auslesen?

    Schätze mal, dass ein Bot besser den Kram lesen kann als ein Mensch.

    --roro

    1. Hallo,

      Schätze mal, dass ein Bot besser den Kram lesen kann als ein Mensch.

      gut, das hilft mir nicht weiter ... wie funktioniert denn die "Texterkennung" der Bots? Warum kann er das Bild entschlüsseln?

      Gruß
      Christian Bliß

      --
      Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
      1. Hallo,

        Schätze mal, dass ein Bot besser den Kram lesen kann als ein Mensch.

        gut, das hilft mir nicht weiter ... wie funktioniert denn die "Texterkennung" der Bots? Warum kann er das Bild entschlüsseln?

        Keine Ahnung. Aber sei mal sogut und zeige nicht nur das IMG sondern den zughörigen HTML-Code mit dem eingebundenen Captcha.

        --roro

        1. Hallo,

          Keine Ahnung. Aber sei mal sogut und zeige nicht nur das IMG sondern den zughörigen HTML-Code mit dem eingebundenen Captcha.

          Ich hau den gerade mal hier rein:

          #!/usr/bin/perl -w
          use CGI::Carp qw(fatalsToBrowser);
          use GD;
          use CGI;

          print new CGI->header(-type=>"image/gif");

          $img = GD::Image->new(300, 100);

          %zeichen = ( "1" => "a",
                       "2" => "b",
                       "3" => "c",
                       "4" => "d",
                       "5" => "e",
                       "6" => "f",
                       "7" => "g",
                       "8" => "h",
                       "9" => "i",
                       "10" => "j",
                       "11" => "k",
                       "12" => "l",
                       "13" => "m",
                       "14" => "n",
                       "15" => "o",
                       "16" => "p",
                       "17" => "q",
                       "18" => "r",
                       "19" => "s",
                       "20" => "t",
                       "21" => "u",
                       "22" => "v",
                       "23" => "w",
                       "24" => "x",
                       "25" => "y",
                       "26" => "z",
                       "27" => "1",
                       "28" => "2",
                       "29" => "3",
                       "30" => "4",
                       "31" => "5",
                       "32" => "6",
                       "33" => "7",
                       "34" => "8",
                       "35" => "9" );

          Hintergrundfarbe

          $fill_color = $img->colorAllocate(250,250,250);
          $img->fill(0, 0, $fill_color);

          Polygone erstellen

          $poly1 =GD::Polygon->new();
          $poly2 =GD::Polygon->new();
          $poly3 =GD::Polygon->new();

          Gitternetz

          for ($i=10; $i<=100; $i=$i+10) {
            $r = int(rand(255));
            $g = int(rand(255));
            $b = int(rand(255));
            my $color = $img->colorAllocate($r,$g,$b);

          $img->dashedLine(0, $i, 300, $i, $color);
          }

          for ($i=10; $i<=300; $i=$i+10) {
            $r = int(rand(255));
            $g = int(rand(255));
            $b = int(rand(255));
            my $color = $img->colorAllocate($r,$g,$b);

          $img->dashedLine($i, 0, $i, 100, $color);
          }

          Zeichen + Polygone

          for ($i=1; $i<7; $i++) {
            $r = int(rand(150));
            $g = int(rand(150));
            $b = int(rand(150));
            my $color = $img->colorAllocate($r,$g,$b);

          $size = (int(rand(15)) +25);

          $rech = $size%2;
            if ($rech eq "0") {
              $angle = "0.".int(rand(5));
            }
            else {
              $angle = "-0.".int(rand(5));
            }

          $x = 40*$i;
            $y = (int(rand(50)) +35);

          $zahl = (int(rand(35)) +1);

          $font_zahl = int(rand(5));

          if ($font_zahl eq "0") {
              $img->stringFT($color,'./arial.ttf',$size,$angle,$x,$y, "$zeichen{$zahl}");
            }
            elsif ($font_zahl eq "1") {
              $img->stringFT($color,'./verdana.ttf',$size,$angle,$x,$y, "$zeichen{$zahl}");
            }
            elsif ($font_zahl eq "2") {
              $img->stringFT($color,'./courir.ttf',$size,$angle,$x,$y, "$zeichen{$zahl}");
            }
            elsif ($font_zahl eq "3") {
              $img->stringFT($color,'./comic.ttf',$size,$angle,$x,$y, "$zeichen{$zahl}");
            }
            else {
              $img->stringFT($color,'./timesnewroman.ttf',$size,$angle,$x,$y, "$zeichen{$zahl}");
            }

          # Polygonpunkte festlegen #
            $poly1_x = int(rand(300));
            $poly1_y = int(rand(100));

          $poly1->addPt($poly1_x,$poly1_y);

          $poly2_x = int(rand(300));
            $poly2_y = int(rand(100));

          $poly2->addPt($poly2_x,$poly2_y);

          $poly3_x = int(rand(300));
            $poly3_y = int(rand(100));

          $poly3->addPt($poly3_x,$poly3_y);
          }

          Polygonfarbe festlegen

          $r1 = int(rand(255));
          $g1 = int(rand(255));
          $b1 = int(rand(255));
          $farbe_poly1 = $img->colorAllocate($r1,$g1,$b1);

          $r2 = int(rand(255));
          $g2 = int(rand(255));
          $b2 = int(rand(255));
          $farbe_poly2 = $img->colorAllocate($r2,$g2,$b2);

          $r3 = int(rand(255));
          $g3 = int(rand(255));
          $b3 = int(rand(255));
          $farbe_poly3 = $img->colorAllocate($r3,$g3,$b3);

          Polygone zeichnen

          $img->polygon($poly1, $farbe_poly1);
          $img->polygon($poly2, $farbe_poly2);
          $img->polygon($poly3, $farbe_poly3);

          Bild ausgeben

          print $img->gif;

          Gruß
          Christian Bliß

          --
          Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
          1. Hallo Christian,

            Keine Ahnung. Aber sei mal sogut und zeige nicht nur das IMG sondern den zughörigen HTML-Code mit dem eingebundenen Captcha.

            Ich hau den gerade mal hier rein:

            Jaja, das Script was das gif erzeugt.

            Was jedoch gibt die HTML-Datei nach draußen?

            Ich meine, es ist bestimmt nicht schwer, hinter Deine Codierung der Zeichen zu kommen:

            %zeichen = ( "1" => "a",
                         "2" => "b",
                         "3" => "c",
                         "4" => "d",
                         "5" => "e",
                         "6" => "f",
                         "7" => "g",
                         "8" => "h",
                         "9" => "i",
                         "10" => "j",
                         "11" => "k",
                         "12" => "l",
                         "13" => "m",
                         "14" => "n",
                         "15" => "o",
                         "16" => "p",
                         "17" => "q",
                         "18" => "r",
                         "19" => "s",
                         "20" => "t",
                         "21" => "u",
                         "22" => "v",
                         "23" => "w",
                         "24" => "x",
                         "25" => "y",
                         "26" => "z",
                         "27" => "1",
                         "28" => "2",
                         "29" => "3",
                         "30" => "4",
                         "31" => "5",
                         "32" => "6",
                         "33" => "7",
                         "34" => "8",
                         "35" => "9" );

            --roro

            1. Hallo,

              Was jedoch gibt die HTML-Datei nach draußen?

              Ich hab das CAPTCHA noch gar nicht eingebaut ... hab mir ehrlich gesagt noch keine Gedanken gemacht ... was muss ich da denn beachten?

              Ich hätte wohl sowas im Sinn:

              <FORM ...>
              <INPUT type="hidden" name="captcha" value="1#19#7#10#9#29">
              <INPUT type="text" name="string">
              <INPUT type="submit" value="ab dafür!">
              </FORM>

              der value im hidden-Feld wäre dann die richtigen Zeichen in der richtigen Reihenfolge, anhand derer die Eingabe des Benutzers/Bots überprüft werden kann (jeweils durch Trennzeichen getrennt).

              Zur Überprüfung würde ich dann wieder den %zeichen-Hash verwenden, nur eben umgekehrt, von Value nach Key.

              Ich meine, es ist bestimmt nicht schwer, hinter Deine Codierung der Zeichen zu kommen:

              Sowas befürchte ich auch, aber wie soll man das sonst lösen?

              Gruß
              Christian Bliß

              --
              Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
              1. Hello,

                der value im hidden-Feld wäre dann die richtigen Zeichen in der richtigen Reihenfolge, anhand derer die Eingabe des Benutzers/Bots überprüft werden kann (jeweils durch Trennzeichen getrennt).

                ja warum machst du denn sowas?? Speichere sie doch serverseitig in der Session ab. Zwar ist durch die Verschlüsselung eine Hürde vorhanden, da ist die Frage ob sich ein Bot "die Mühe machen" würde, aber warum willst du so ein Loch in deine Verteidigung reißen?

                MfG
                Rouven

                --
                -------------------
                Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
                1. Hallo,

                  ja warum machst du denn sowas?? Speichere sie doch serverseitig in der Session ab. Zwar ist durch die Verschlüsselung eine Hürde vorhanden, da ist die Frage ob sich ein Bot "die Mühe machen" würde, aber warum willst du so ein Loch in deine Verteidigung reißen?

                  Ich arbeite leider ohne Sessions ... aber du hast recht. Da sollte ich mir was überlegen. Obwohl, kommt ein Bot wirklich dahinter, dass sich hinter der "1" im value auch der Buchstabe "klein-a" versteckt? Er muss ja "a" eingeben und nicht die "1", die im value steht.

                  Gruß
                  Christian Bliß

                  --
                  Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
                  1. Hello,

                    Ich arbeite leider ohne Sessions ... aber du hast recht. Da sollte ich mir was überlegen. Obwohl, kommt ein Bot wirklich dahinter, dass sich hinter der "1" im value auch der Buchstabe "klein-a" versteckt? Er muss ja "a" eingeben und nicht die "1", die im value steht.

                    na ja - eigentlich nicht, er weiß ja nicht wonach er sucht. Er könnte schnell aufgeben. Es sei denn, er will wirklich rein. In dem Fall - das wirst du zugeben - ist eine Verschlüsselung von 1..36 beginnend bei a und endend bei 0 relativ durchschaubar, das ist ja der Reihe nach, da kommt man schnell drauf.

                    MfG
                    Rouven

                    --
                    -------------------
                    Eine Bilanz ist wie der Bikini einer Frau. Sie zeigt fast alles, aber verdeckt das Wesentliche  --  Günter Stotz, Regierungsdirektor des baden-württembergischen Wirtschaftsministeriums
                    1. Hallo,

                      na ja - eigentlich nicht, er weiß ja nicht wonach er sucht. Er könnte schnell aufgeben. Es sei denn, er will wirklich rein. In dem Fall - das wirst du zugeben - ist eine Verschlüsselung von 1..36 beginnend bei a und endend bei 0 relativ durchschaubar, das ist ja der Reihe nach, da kommt man schnell drauf.

                      Klar, für einen MENSCHEN stellt diese 1..36-Verschlüsselung kein Hindernis dar, aber wir jeden ja von einem "dummen" Bot ...

                      Gruß
                      Christian Bliß

                      --
                      Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
                      1. Hallo Christian,

                        Klar, für einen MENSCHEN stellt diese 1..36-Verschlüsselung kein Hindernis dar, aber wir jeden ja von einem "dummen" Bot ...

                        Jeder noch so "dumme" Bot wird von intelligenten _Menschen_ geschrieben (auch, wenn sie ihre Intelligenz für böse Taten missbrauchen).

                        Grüße

                        Marc Reichelt || http://www.marcreichelt.de/

                        --
                        Linux is like a wigwam - no windows, no gates and an Apache inside!
                        Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
              2. Hallo Christian,

                Was jedoch gibt die HTML-Datei nach draußen?

                Ich hab das CAPTCHA noch gar nicht eingebaut ... hab mir ehrlich gesagt noch keine Gedanken gemacht ... was muss ich da denn beachten?

                Ganz einfach: Es darf für den Besucher (oder den mistigen Bot) nicht erkennbar sein, was für ein Zusammenhang zwischen dem mit GD.pm erzeugten Zeichenstring und dem in einem Cookie oder in einem hidden-field abgelegten "session-key" besteht.

                Hier ein Schmankerl aus meiner Parxis:

                Frage:
                Wie kann ich einen Text verschluesseln ? Als Anwendung denke ich da an
                Filenamen, welche von meinem Formular an das CGI-Script uebergeben werden
                (hidden-Parameter), aber nicht unbedingt im Klartext erscheinen sollen.

                Antwort:
                Allgemeine Herangehensweise:

                Man nimmt Text und einen geheimen Schluessel, verknotet beide und gibt den
                Buchstabensalat weiter. Der Empfänger entknotet den Text wieder mit diesem
                Schlüssel (synchrone Verschlüsselung).
                Die ist bei grossen Schlüsseln relativ sicher, man sollte bei längeren Texten
                die Häufigkeit bestimmter Buchstaben ausschliessen (z.B. noch zusätzlich packen).

                Hier der Code:

                $z="Alle meine Entchen schwimmen auf dem See.";
                @geheim=(61,52,43,34,25,16);
                $len=scalar(@geheim);

                $crypt=join "",
                  map { $i=($i+1)%$len;
                        chr((ord($_)+$geheim[$i])%256) } split //,$z;

                $i=0;
                $orig=join "",
                  map { $i=($i+1)%$len;
                        chr((ord($_)-$geheim[$i]+256)%256) }
                         split //,$crypt;

                print "Geheim:#$crypt#\n";
                print "Orig:#$orig#\n";

                Der Key für eine derartige synchrone Textverschlüsselung ist zusammen mit der Session in der DB zu speichern. Damit hat ein Bot keine Chance mehr.

                --roro

  3. Meint ihr, das taugt was oder kommt ein Bot schnell hinter das System und kann die Buchstaben und Zahlen auslesen?

    Ich glaube, dass das ganz OK ist. Lies Dich aber mal im Web schlau, ob bspw. die von Dir verwendeten Module (falls Du Standard-Captacha Module verwendest) sicher sind.

    Ueberhaupt - zu Captchas gibt es Unmengen Material.

    1. Hallo,

      Ich glaube, dass das ganz OK ist. Lies Dich aber mal im Web schlau, ob bspw. die von Dir verwendeten Module (falls Du Standard-Captacha Module verwendest) sicher sind.

      Was sind denn "Standard-Captacha Module"?

      Ueberhaupt - zu Captchas gibt es Unmengen Material.

      Hab mich quer durchs Internet gelesen, aber hab jetzt nicht so viel gefunden, was mir weitergeholfen hat.
      Gut, ich weiß, dass sich die Farben, die Schriftart, die Position der Zeichen sowie der Winkel bei jeden Captcha ändern sollte ... aber wie ein Bot die Captchas auslesen kann, fand ich leider nicht.

      Gruß
      Christian Bliß

      --
      Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
      1. Ich glaube, dass das ganz OK ist. Lies Dich aber mal im Web schlau, ob bspw. die von Dir verwendeten Module (falls Du Standard-Captacha Module verwendest) sicher sind.

        Was sind denn "Standard-Captacha Module"?

        http://www.cpan.org
        [http://search.cpan.org/search?query=captcha&mode=all]

        Sowas gibts auch fuer PHP bspw..

        Ueberhaupt - zu Captchas gibt es Unmengen Material.

        Hab mich quer durchs Internet gelesen, aber hab jetzt nicht so viel gefunden, was mir weitergeholfen hat.

        Wenn Du Dir selbst was gebaut hast, dann ist das schon mal gut. Wie bereits geschrieben - ich finde Dein Captcha gut.

        Aber es sind bereits Merkmale mit ihren Auspraegungen entwicklet worden, die die Qualitaet von Captchas besser einordnen als mein ad hoc-Statement. Sei so nett und such selbst. Kannst Du Englisch? (rhet.Frage, hilft in diesem Fall)

  4. Hello out there!

    Meint ihr, das taugt was

    Nein.

    oder kommt ein Bot schnell hinter das System und kann die Buchstaben und Zahlen auslesen?

    Ein Bot muss keine Buchstaben und Zahlen auslesen, das erledigen Menschen für ihn – bereitwillig. [1, 2, 3]

    Captchas stellen für menschliche Nutzer eine ärgerliche Barriere dar (für Sehschwache und Blinde gar eine unüberwindbare!), für intelligente Bots jedoch nicht. Captchas verfehlen ihren Zweck, sind aber nutzerfeindlich – unterm Strich also sinnlos.

    See ya up the road,
    Gunnar

    --
    „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    1. Hallo Gunnar,

      Captchas stellen für menschliche Nutzer eine ärgerliche Barriere dar (für Sehschwache und Blinde gar eine unüberwindbare!), für intelligente Bots jedoch nicht. Captchas verfehlen ihren Zweck, sind aber nutzerfeindlich – unterm Strich also sinnlos.

      Klar, Captchas sind eine temporäre Erscheinung des modernen Web - niemand will sie, aber sie werden doch irgendwo benötigt.
      Wir möchten in einem aktuellen Projekt ("Linux Drivers") Benutzern ermöglichen, sich mit geringem Aufwand zu registrieren und so als registrierter Benutzer neue Hardware-Informationen in die Datenbank einzupflegen. Welche Möglichkeiten würdest du deiner Meinung nach einsetzen, um einen wilden Bot-Ansturm zu vermeiden? Die Identifikation anhand der IP-Adresse ist ein Mittel, aber was bietet sich noch an?

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      1. Hallo,

        was bietet sich noch an?

        http://akismet.com

        Grüße
        Jeena Paradies

        1. Hallo Jeena,

          was bietet sich noch an?
          http://akismet.com

          Klingt gut.
          Allerdings ist das Ganze wohl eher für ganze Blog- oder Gästebuch-Einträge gedacht.
          Ich gedenke, ein Registrierungsformular zu schützen, das (bislang) nur aus den folgenden Eingaben besteht:

          • E-Mail-Adresse
          • Username
          • Passwort (2x)

          Da sowohl die E-Mail-Adresse als Username und Passwort einem bestimmten Format unterliegen müssen ist das Formular schon sehr eingeschränkt.
          Natürlich ist es sinnvoll, den Ladezeitpunkt der Formular-Seite in einer Session zu sichern, um dann die Zeit in der Ziel-Seite entsprechend abzufangen.

          Wahrscheinlich wird es doch wohl darauf hinauslaufen, dass wir individuelle Schutzmaßnahmen einbauen.

          Grüße

          Marc Reichelt || http://www.marcreichelt.de/

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      2. Welche Möglichkeiten würdest du deiner Meinung nach einsetzen, um einen wilden Bot-Ansturm zu vermeiden?

        Vielleicht wäre eine bessere Möglichkeit anstelle von CAPTCHAs ein Formularfeld, das eine der vorherigen Eingabe nochmal als Wiederholung haben möchte:

        -> Bitte geben Sie Ihre Angabe aus dem Feld "Nachname" erneut ein
           _________________

        Das Feld wird dabei zufällig ausgewählt und könnte zudem anders markiert sein ("..aus dem 3. Feld..", etc). Nicht wirklich komfortabel, aber dennoch zugänglicher als ein Bildchen. Macht allerdings auch nur bei komplexeren Formularen Sinn.

        Eine andere Möglichkeit: dem Benutzer einen (zufallsgesteuerten) Satz vorlegen und daraus etwas abfragen: "James Brown starb im Alter von 73 Jahren. Wie war sein Vorname?".

        Viele Grüße!
        _ds

        --
        »Regel Nummer 1: Keine nachträglichen Änderungen des Deals.«
        Top 5-Blog, Schöne Sätze für den Alltag, Teil 2.
      3. Hallo Marc,

        was bietet sich noch an?

        http://www.dorfdesign.pytalhost.de/apps/hnocaptcha

        Grüße,

        Jochen

        --
        Kritzeln statt texten:
        Scribbleboard
        1. http://www.dorfdesign.pytalhost.de/apps/hnocaptcha

          Könnte evtl. problematisch für manche Farbenblinde werden und ließe sich auch relativ einfach austricksen. Auf die brutale Weise, in dem man einfach einen Bot tausendmal in die Mitte des Bildes "klicken" lässt, irgendwann wird der Bot dann schon z.B. ne gesuchte Nase treffen, auf etwas intelligentere Art, indem mal sich eine kleine Funktion schreibt, die die Bilder mit den Originalbildern vergleicht (die man sich einfach zusammensetzen kann), die Verschiebung ermittelt und dann automatisch auf die vorher manuell eingespeisten Koordinaten klickt.

        2. was bietet sich noch an?

          http://www.dorfdesign.pytalhost.de/apps/hnocaptcha

          Da kommt bei mir immer *falsch*, egal wohin ich klicke.

          Struppi.

          --
          Javascript ist toll (Perl auch!)
      4. Hallo Marc,

        Wir möchten in einem aktuellen Projekt ("Linux Drivers") Benutzern ermöglichen, sich mit geringem Aufwand zu registrieren (...)

        Das betrifft weniger die Spam-Geschichte als vielmehr den Punkt "geringer Aufwand": Ihr solltet auch OpenID implementieren. OpenID ist in kurz ein dezentraler Authentifizierungsdienst, der es einem ermöglicht, sich durch die Angabe eine URI zu bestätigen, dass man man selbst ist, die tatsächliche Authentifikation geschieht dabei aber durch einen eigenen Service oder sogar durch den eigenen Webspace.

        * Wikipedia: OpenID
        * Screencast des Verfahrens

        Welche Möglichkeiten würdest du deiner Meinung nach einsetzen, um einen wilden Bot-Ansturm zu vermeiden?

        Ich hätte keine Reue, Javascript einzusetzen, um ein "Benutzer benutzt einen JS-fähigen Browser"-Flag im abzusendenden Formular zu setzen. Dies ist nun mal ein sehr zuverlässiger Hinweis, dass der POST-Request von einem Menschen und nicht von einem Bot kam. Dies natürlich nur, wenn die Benutzung des Formulars von der Nicht-JS-Crew weiter möglich ist; bei Deiner Zielgruppe dürfte das höher als normal sein. Sieh es weniger als Aussperren, sondern als ein Hinweis der Bewertung auf Spam-Wahrscheinlichkeit des Requests. Kann man auch gut mit anderen Methoden kombinieren.

        Sollte es eine hohe Spam-Wahrscheinlichkeit geben, wird der Post halt nicht sofort übernommen, sondern es kommt eine zweite Seite mit einem minimalen Turing-Test. Aber bitte keine grafisches Captcha sondern ein Text-Captcha, wie schon häufiger vorgeschlagen.

        Tim

        1. Ich hätte keine Reue, Javascript einzusetzen, um ein "Benutzer benutzt einen JS-fähigen Browser"-Flag im abzusendenden Formular zu setzen. Dies ist nun mal ein sehr zuverlässiger Hinweis, dass der POST-Request von einem Menschen und nicht von einem Bot kam.

          Ähm, wie willst du Bots daran hinders, dieses Flag auch zu setzen?

          1. Hallo Jonathan,

            Ähm, wie willst du Bots daran hinders, dieses Flag auch zu setzen?

            ein document.write("<input name='browser_kann_javascript' ....

            dürfte für einen Bot (noch) eine Hürde darstellen.

            Grüße,

            Jochen

            --
            Kritzeln statt texten:
            Scribbleboard
            1. ein document.write("<input name='browser_kann_javascript' ....

              dürfte für einen Bot (noch) eine Hürde darstellen.

              Sicher, aber ein Bot braucht gar keine html-Elemente zu verwalten. Er kann ja im Falle eines GET-Formulars einfach folgendes Aufrufen:

              http://adresse/script?browser_kann_javascript=1&text=toller spam

              Im Falle eines POST-Formulars ist das auch nicht sonderlich schwieriger.
              Natürlich muss man dem Bot vorher einprogrammieren, das er das machen soll. Will man nur irgenwelche Bots abwehren, die nur blind irgendwelche Seiten durchsuchen, kann man das genauso gut mit irgendwelchen Fake-Formularfeldern, dann muss man auch kein Javascript misbrauchen.

              Im übrigen sehe ich auch kein großes Problem Bots Javascript bizubringen. Mozilla-Browser kann man leicht anpassen, da müsste auch problemlos Bot-Funktionalität einprogrammierbar sein.

              1. Hallo Jonathan,

                Sicher, aber ein Bot braucht gar keine html-Elemente zu verwalten. Er kann ja im Falle eines GET-Formulars einfach folgendes Aufrufen: http://adresse/script?browser_kann_javascript=1&text=toller spam

                Dazu muss er das Feld aber erst kennen. Und das Flag muss ja auch keine Ja- oder Nein-Entscheidung sein sein, sondern kann durchaus ein mittels Javascript errechneter Wert sein, der sich andauernd ändert, Hash der Session oder so etwas. Marc hat nur eine Webseite, allein vom Aufwand lohnt sich das für einen Bot-Schreiber nicht, dem Verfahren auf den Grund zu gehen und das Bot-Skript entsprechend anzupassen.

                Und serverseitig kann man dann simpel eine Wahrscheinlichkeit für Spam bestimmen:

                • Formularfeld ist mit dem temporär richtigen Wert ausgefüllt
                  → Hohe Wahrscheinlichkeit auf menschlichen Nutzer mit aktiviertem Javascript
                • Formularfeld ist falsch ausgefüllt
                  → Hohe Wahrscheinlichkeit auf einen wild um sich schiessenden Spambot.
                • Formularfeld ist gar nicht ausgefüllt
                  → Wahrscheinlichkeit auf einen menschlichen Besucher mit deaktiviertem Javascript.

                Natürlich muss man dem Bot vorher einprogrammieren, das er das machen soll.

                Das ist eben die Chance. Natürlich kann man jedem Bot eine Aushebelung des Verfahrens beibringen; absolute „Sicherheit“ erreicht man da nicht. Beachte bitte auch, wie ich von Wahrscheinlichkeiten rede. Der Knackpunkt ist es aber, das schwieriger zu machen, dass es sich nicht lohnt. Kommentarspam ist ja unter anderem ein Problem geworden, weil es so viele Standardinstallationen von bestimmten Skripten gibt, Wordpress, Textpattern, etc., bei denen die Formularfelder oder gleich das Zielskript bekannt ist, danach hat sich das meines Empfindens erst auf das wilde POST-Ballern verlegt. Einzellösungen mit randomisierten Aspekten gewinnen da nun mal, weil es sich für einen Bot-Autoren im Gegensatz zu einer ubiquitären Lösung dort weniger lohnt, sich den Mechanismus so genau anzuschauen, um ihn dann umgehen zu können.

                Im übrigen sehe ich auch kein großes Problem Bots Javascript bizubringen. Mozilla-Browser kann man leicht anpassen, da müsste auch problemlos Bot-Funktionalität einprogrammierbar sein.

                Leicht ist etwas übertrieben, aber ja, es ist möglich. Nur: Spam wird meist von Botnetzen abgesetzt, so ein Bot muss sich auf seinem „Wirtssystem“ recht unauffällig verhalten (weil Virenscanner) und möglichst effektiv (weil er soll ja _Massen_versand betreiben). So ein hypothetischer Bot mit integriertem Mozilla inklusive Javascript-Interpreter hat da einen ziemlich großen Fussabdruck. Und wenn der dann noch einen rechenintensiven, sich verändernden Algorithmus durchrechnen muss, wird das schnell untoll im Sinne des schnellen Massenversandes.

                Das ist im wesentlichen dieselbe Logik, die auch hinter Möglichkeiten zur Spamverringerung wie HashCash oder teilweise auch Greylisting stehen: Jede Transaktion mit etwas kostenintensiven Aufwand zu belegen, so dass der Massenversand unökonomisch wird, hier sind es Rechen- und Entwicklungskosten. Solange nur mit technischen Mitteln versucht wird, Spam zu erkennen, bleibt es nun mal ein Rüstungswettlauf.

                Tim

                1. Mozilla-Browser kann man leicht anpassen, da müsste auch problemlos Bot-Funktionalität einprogrammierbar sein.

                  Leicht ist etwas übertrieben, aber ja, es ist möglich.

                  Wer Javascript kann, kann auch (fast) Firefox/Mozilla-Erweiterungen schreiben. Un wirklich schwer ist das nicht. Wer gute Bots programmieren kann, schafft auch das.

                  So ein hypothetischer Bot mit integriertem Mozilla inklusive Javascript-Interpreter hat da einen ziemlich großen Fussabdruck.

                  So ein Bot könnte sich durch eine Sicherheitslücke oder ein externes Programm automatisch und (für normale Benutzer) relativ unsichtbar in eine vorhandene Mozilla-Installation auf jedem normalen Heimrechner einnisten. Mozilla-browser sind ja immer wieter verbreitet, das stellt auch kein Hindernis dar.

    2. Hallo,

      Ein Bot muss keine Buchstaben und Zahlen auslesen, das erledigen Menschen für ihn – bereitwillig. [1, 2, 3]

      Captchas stellen für menschliche Nutzer eine ärgerliche Barriere dar (für Sehschwache und Blinde gar eine unüberwindbare!), für intelligente Bots jedoch nicht. Captchas verfehlen ihren Zweck, sind aber nutzerfeindlich – unterm Strich also sinnlos.

      Gibt es keine Möglichkeit dem Bot zu "verbieten" das Captcha auf einer anderen Seite anzuzeigen?

      Es gibt ja auch Seiten, die zeigen ein "Pseudobild" an, wenn man einen HTML-IMG-Link auf Bilder setzt. Da sieht mann dann nicht das verlinkte Bild, sondern nur ne Standardfehlermeldung als JPG oder GIF. Kann man das nicht nutzen?

      Gruß
      Christian Bliß

      --
      Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
      1. Hello out there!

        Gibt es keine Möglichkeit dem Bot zu "verbieten" das Captcha auf einer anderen Seite anzuzeigen?

        Der Bot muss das Captcha ja nicht von deinem Server einbinden; es sollte für ihn kein Problem darstellen, eine lokale Kopie davon anzulegen.

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        1. Der Bot muss das Captcha ja nicht von deinem Server einbinden; es sollte für ihn kein Problem darstellen, eine lokale Kopie davon anzulegen.

          Ja.
          Denkbar wäre zum Beispiel:
          • Bot ruft deine Loginseite auf
          • Bot lädt das Captcha herunter
          • Bot bindet eine Kopie davon in eine andere Webseite ein und lässt das Captcha lösen
          • Sobald das Captcha gelöst ist, versucht der Bot mit dem hoffentlich richtigen Ergebnis die Loginseite auszufüllen

          Entgegenwirken kannst du dem, aber wirklich verhindern kannst du es nicht. Gegenmaßnahmen wären:
          • Das Captcha einer Loginseite muss in einem bestimmten Zeitraum ausgefüllt werden. Es macht keinen Sinn 5 Stunden auf eine Lösung zu warten, die evtl. auf einer anderen schlecht besuchten Pornoseite erstellt wird.
          • Schreibe deinen Domain-namen o.ä. als kleines Wasserzeichen mit aufs Captchabild drauf. Am besten so, dass ein "Bot" es nicht automatisch abschneiden oder übermalen kann.
          • Versuche einem Client nur ein Captcha zuzuordnen und nicht zu erlauben dass 50 Captchas nacheinander abgeholt werden und später dann alle 50 Formulare abgeschickt werden.

  5. Moin,

    wesentlich unterscheiden sich menschliche Surfer (HS) von Bots dahingehend, dass die nicht gleich was posten, sondern erst einmal die Seite anschauen.

    Bis zu einem POST vergehen so einige Sekunden, was HS von einem Bot unterscheidet. Ein Bot hingegen schnappt sich die URL und postet ohne Verzögerung.

    Und welcher Bot weiß schon, dass er bspw. 10 Sekunden warten muss, bevor er was postet ;-)

    --roro

    1. Hallo Rolf,

      Und welcher Bot weiß schon, dass er bspw. 10 Sekunden warten muss, bevor er was postet ;-)

      "Intelligentere"[0] Abwehrsysteme werden "intelligentere"[1] Bots zur Folge haben.
      Es gibt einen Punkt, an dem es nicht weitergehen kann: Das tritt nämlich dann ein, wenn ein Bot die gleiche Verhaltensweise verfolgt wie ein Mensch - und beispielsweise entsprechend der Größe des Feldes eine Zeit wartet, bevor er das Formular abschickt.

      Außerdem werden Bots von Menschen geschrieben. Wenn ein Bot ein Problem nicht lösen kann, wird sein User[2] im zeigen, wie das geht.

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      [0] Ich weiß, es gibt bislang keine intelligente Software. Mit "intelligent" meine ich in diesem Sinne, dass das Programm an das Verhalten des Menschen angepasst wird.
      [1] Ich wiederhole mich. ;-)
      [2] Tron lässt grüßen.

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      1. hi Marc,

        Und welcher Bot weiß schon, dass er bspw. 10 Sekunden warten muss, bevor er was postet ;-)

        "Intelligentere"[0] Abwehrsysteme werden "intelligentere"[1] Bots zur Folge haben.
        Es gibt einen Punkt, an dem es nicht weitergehen kann: Das tritt nämlich dann ein, wenn ein Bot die gleiche Verhaltensweise verfolgt wie ein Mensch - und beispielsweise entsprechend der Größe des Feldes eine Zeit wartet, bevor er das Formular abschickt.

        9, 10 oder 13 Sekunden? Naja auch ein Bot kriegt das irgendwann raus, da hast Du schon Recht.

        Ein Webmaster hat die Kontrolle darüber, indem er öfter mal ins Log schaut.

        Wer das nicht macht, darf sich nicht Webmaster nennen.

        --roro

        1. Hallo _roro,

          9, 10 oder 13 Sekunden? Naja auch ein Bot kriegt das irgendwann raus, da hast Du schon Recht.

          Ein Webmaster hat die Kontrolle darüber, indem er öfter mal ins Log schaut.

          Wer das nicht macht, darf sich nicht Webmaster nennen.

          Ein "Webmaster" hat IMHO besseres zu tun als seine Logs auf Bots zu prüfen. Zumal sie ihm für die bereits erfolgten Zugriffe von Bots nichts bringen.

          Grüße

          Marc Reichelt || http://www.marcreichelt.de/

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    2. Hallo,

      Bis zu einem POST vergehen so einige Sekunden, was HS von einem Bot unterscheidet. Ein Bot hingegen schnappt sich die URL und postet ohne Verzögerung.

      Und die Gauner von Spambotschreibern lesen auch in den Foren und erfahren auf einfache Weise und ohne lange testen zu müssen, wie man die Abwehrschranken überlistet.
      Ich arbeite ohne CATCHPAs hatte ca. 50 Spams pro Tag nach völliger Überarbeitung meines Formulars seit 4 Wochen kein einziges. Um diesen Zustand zu erhalten, verrate ich nicht, wie dies geschieht. Aber es lohnt sich immer, individuelle Verfahren anzuwenden.

      1. Ich arbeite ohne CATCHPAs hatte ca. 50 Spams pro Tag nach völliger Überarbeitung meines Formulars seit 4 Wochen kein einziges. Um diesen Zustand zu erhalten, verrate ich nicht, wie dies geschieht. Aber es lohnt sich immer, individuelle Verfahren anzuwenden.

        Ein naiver Ansatz. Erinnert mich an die Schulkinder, die mit einem "Ich weiss was, sag aber nicht was." die Umwelt begluecken.

        Uebrigens ist es nicht undenkbar und somit moeglich, dass man die Bots mit einem Massnahmenpaket wirkungsvoll abblockt, obwohl dieses Paket offen kommunziert worden ist. (Selbstverstaendlich koennte es dabei auch den einen oder anderen Nutzer erwischen. Stimmts?   LOL)

        1. Ein naiver Ansatz. Erinnert mich an die Schulkinder, die mit einem "Ich weiss was, sag aber nicht was." die Umwelt begluecken.

          Deine persönliche Meinung!
          Meine Meinung dazu:
          Zuviel Öffentlichkeit ist manchmal schädlich. Ich sage dies aus einer langjährigen EDV-Erfahrung an Großrechnern und später PCs.

          Es ist eher naiv zu glauben, ich veröffentliche alle Möglichkeiten der Spamabwehr, der 'Gegner' wird dadurch abgeschreckt und wirds schon gar nicht versuchen im Gegenteil es ist eine Herausforderung auch die neueste, 'sichere' Methode zu knacken. Man sieht es doch an den zahlreichen 'supersicheren' Verschlüsselungen im Download-Sektor.
          Kaum am Markt, schon geknackt.
          So long

          1. Hallo Siggi.

            Es ist eher naiv zu glauben, ich veröffentliche alle Möglichkeiten der Spamabwehr, der 'Gegner' wird dadurch abgeschreckt und wirds schon gar nicht versuchen […]

            Wer glaubt denn so etwas? Sinn und Zweck der Veröffentlichung ist doch, dass sich jeder den Code anschauen und auf Schwachstellen aufmerksam machen oder sie gar selbst ausbessern kann. Mit „Abschreckung“ hat das nichts zu tun. (Wobei eine Codewüste durchaus abschreckend wirken kann.)

            Einen schönen Donnerstag noch.

            Gruß, Mathias

            --
            ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
            debian/rules
    3. Bis zu einem POST vergehen so einige Sekunden, was HS von einem Bot unterscheidet. Ein Bot hingegen schnappt sich die URL und postet ohne Verzögerung.

      Und welcher Bot weiß schon, dass er bspw. 10 Sekunden warten muss, bevor er was postet ;-)

      Ich lese das immer wieder, vielleicht sind auch die SPAM-Bots so dumm, aber warum?

  6. Meint ihr, das taugt was oder kommt ein Bot schnell hinter das System und kann die Buchstaben und Zahlen auslesen?

    Zu allem bereits gesagten möchte ich noch anführen, dass es für mich bei deinem Beispielcaptche nicht ersichtlich ist, ob der 4. Buchstabe eine 1 oder ein kleines L ist. Bei meinem selbst programmierten Captcha-System (das ich nur für eine Art Admin-Bereich nutze) wird daher der Zeichenvorrat entsprechend gekürzt. Ich streiche z.B: 5/S, 1/l/I, O/0 und B/8. Gerade wenn man verschiedene Schriftarten nimmt (aber auch sonst), halte ich das für sehr wichtig.

    Das es schwachsinnig ist, die Lösung in einem hidden-Feld mitzugeben wurde ja schon gesagt. Wenn überhaupt, dann ein MD5-Hash der richtigen Lösung, wobei auch das nicht wirklich sicher ist. Am besten du speicherst eine Art ID in einem Cookie und speicherst den Rest auf dem Webserver an einem nicht-öffentlich zugänglichen Ort.

    1. Hallo,

      Zu allem bereits gesagten möchte ich noch anführen, dass es für mich bei deinem Beispielcaptche nicht ersichtlich ist, ob der 4. Buchstabe eine 1 oder ein kleines L ist. Bei meinem selbst programmierten Captcha-System (das ich nur für eine Art Admin-Bereich nutze) wird daher der Zeichenvorrat entsprechend gekürzt. Ich streiche z.B: 5/S, 1/l/I, O/0 und B/8. Gerade wenn man verschiedene Schriftarten nimmt (aber auch sonst), halte ich das für sehr wichtig.

      Von "Beispielcaptcha" kann keine Rede sein, das ist schon das fertige Programm ;) Drück mal F5, dann wird mit 80-90%iger Wahrscheinlichkeit der 4. Buchstabe kein L (oder ne 1) sein :)

      Aber grundlegend hast du recht! Gibt es außer den hier: 5/S, 1/l/I, O/0 und B/8 noch andere, die ich raushauen sollte?

      Am besten du speicherst eine Art ID in einem Cookie und speicherst den Rest auf dem Webserver an einem nicht-öffentlich zugänglichen Ort.

      Das hört sich interessant an, wie meinst du das? Also ID (werde da wohl unique_id nehmen) ist klar, Cookie und nicht-öffentlicher Bereich (.htaccess) auch. Aber wie soll das aussehen? Wie verbinde ich die richtige Captcha-Lösung mit Cookie, ID und .htaccess-Bereich?
      Was hast du im Sinn?

      Gruß
      Christian Bliß

      --
      Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
      1. Von "Beispielcaptcha" kann keine Rede sein, das ist schon das fertige Programm ;) Drück mal F5, dann wird mit 80-90%iger Wahrscheinlichkeit der 4. Buchstabe kein L (oder ne 1) sein :)

        Achso. ^^

        Aber grundlegend hast du recht! Gibt es außer den hier: 5/S, 1/l/I, O/0 und B/8 noch andere, die ich raushauen sollte?

        Kann ich so nicht sagen. Ich würde mir einfach mit deinem Captcha-System ein paar Captchas erstellen lassen und versuchen die aus mind. 5 Meter Wntfernung vom Bildschirm zu lösen. Solltest du damit Probleme haben solltest du vermutlich dein Captcha-System überarbeiten.

        Das hört sich interessant an, wie meinst du das? Also ID (werde da wohl unique_id nehmen) ist klar, Cookie und nicht-öffentlicher Bereich (.htaccess) auch. Aber wie soll das aussehen? Wie verbinde ich die richtige Captcha-Lösung mit Cookie, ID und .htaccess-Bereich?
        Was hast du im Sinn?

        Bei meinem Captcha hab ich das so realisiert:

        • For Formularseite enthält einfach nur das Bild und ein Texteingabefeld für den Bestätigungstext (und natürlich die ganzen anderen Eingabefelder)
        • Wenn das Captcha-Bild aufgerufen wird, erstellt "das Bild" den Code, sowie eine zufällige einzigartige ID (UID).
        • Aus dem Code wird das Bild generiert, die UID wird zusammen mit dem richtigen Code in eine nicht zugängliche Datei (oder Datenbank) geschrieben. Die UID wird in einem Cookie an den Benutzer gesendet.
        • Nach dem Abschicken des Formulars wird die UID wieder vom Benutzer ermittelt. Aus der Datei/Datenbank wird damit dann der richtige Code ermittelt und mit dem Code des Benutzers verglichen.

        Das Verfahren ist in soweit sicher, dass der Benutzer/Bot nur das Bild und eine für ihn völlig belanglose UID hat. Er ist also gezwungen wirklich das Bild auszulesen und kann in keinem Fall über irgendwelche übergebenen Werte an den Code kommen. Die Sicherheit dabei hängt also nur von der Qualität des Bildes ab. Hier würde ich übrigens das JPG-Format empfehlen. Wenn du das richtig stark komprimierst kriegst du schöne Artefakte, die zwar das Bild ein bischen verrauschen und verunstalten, die Lesbarkeit aber kaum beeinträchtigen, nur Bots/OCR-Programme möglicherweise stark einschränken.

        Einziger Nachteil des Verfahrens ist, dass Cookies wirklich benötigt werden. Deshalb sollte man Captchas wirklich nur da einsetzen, wo es nötig ist.

        PS: Wenn du mein Captcha näher testen willst, guck dir mal http://www.firefox-browser.de/MediaWiki/extensions/captcha/test.php an.

        1. Hallo,

          Aber grundlegend hast du recht! Gibt es außer den hier: 5/S, 1/l/I, O/0 und B/8 noch andere, die ich raushauen sollte?
          Kann ich so nicht sagen. Ich würde mir einfach mit deinem Captcha-System ein paar Captchas erstellen lassen und versuchen die aus mind. 5 Meter Wntfernung vom Bildschirm zu lösen. Solltest du damit Probleme haben solltest du vermutlich dein Captcha-System überarbeiten.

          5 Meter Entfernung? Da kann ich weder Captcha noch sonstige Webseiteninhalte erkennen ;)

          Bei meinem Captcha hab ich das so realisiert:

          • For Formularseite enthält einfach nur das Bild und ein Texteingabefeld für den Bestätigungstext (und natürlich die ganzen anderen Eingabefelder)
          • Wenn das Captcha-Bild aufgerufen wird, erstellt "das Bild" den Code, sowie eine zufällige einzigartige ID (UID).
          • Aus dem Code wird das Bild generiert, die UID wird zusammen mit dem richtigen Code in eine nicht zugängliche Datei (oder Datenbank) geschrieben. Die UID wird in einem Cookie an den Benutzer gesendet.

          Wie kannst du AUS DER UID ein Bild generieren? Wie meinst du das?

          Einziger Nachteil des Verfahrens ist, dass Cookies wirklich benötigt werden. Deshalb sollte man Captchas wirklich nur da einsetzen, wo es nötig ist.

          Ja, Cookies sind doof, bei mir geht es um ein zugespammtes Gästebuch ... aber was tut man nicht alles.

          Gruß
          Christian Bliß

          --
          Selfcode: fo:| ch:{ rl:( br:> n4:~ ie:% mo:} va:) de:< zu:| fl:( ss:) ls:> js:{
          1. Hallo,

            Aber grundlegend hast du recht! Gibt es außer den hier: 5/S, 1/l/I, O/0 und B/8 noch andere, die ich raushauen sollte?
            Kann ich so nicht sagen. Ich würde mir einfach mit deinem Captcha-System ein paar Captchas erstellen lassen und versuchen die aus mind. 5 Meter Wntfernung vom Bildschirm zu lösen. Solltest du damit Probleme haben solltest du vermutlich dein Captcha-System überarbeiten.

            5 Meter Entfernung? Da kann ich weder Captcha noch sonstige Webseiteninhalte erkennen ;)

            Naja. Hängt natürlich auch davon ab, wie gut du diehst und wie groß dein Bildschirm ist. Kannst auch näher dranbleiben. ;)

            Wie kannst du AUS DER UID ein Bild generieren? Wie meinst du das?

            Hast mich falsch verstanden. Ich generiere im Code des Bildes einfach irgendeine UID. Das Bild erstelle ich mit den GD-Funktionen.

            (Pseudo)code des Bildes:
            uid = erstelle_zufällige_id();
            code = erstelle_code_aus_buchstaben_und_zahlen();
            malebild(code);
            speichere_datei(dateiname:uid,inhalt:code);
            setze_cookie(uid);

            Pseudocode der Überprüfung:
            uid = gib_cookie();
            code = lese_aus_datei(uid);
            usercode = $_POST["code"];
            if (code == usercode)
              //code richtig
            else
              //code falsch

            Das alles ist natürlich nicht vollständig, man müsste auch überprüfen ob die UID gültig ist, die Datei existiert usw. Außerdem muss man irgendwo alte Dateileichen (bzw. Datenbankeintragsleichen) entfernen, die entstehen, dass jemand das Formular abgerufen aber nicht abgeschickt hat.

      2. Shalom!

        Aber grundlegend hast du recht! Gibt es außer den hier: 5/S, 1/l/I, O/0 und B/8 noch andere, die ich raushauen sollte?

        Es gibt Schriftarten, in denen das kleine j nach unten hin nur ein bißchen länger ist als das i. Wenn Du eine davon verwendest, würde ich diese beiden Buchstaben auch noch streichen.

        Viele Grüße vom Længlich