formularabfage für grafischen code

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • formularabfage für grafischen code

    hallo,
    ich habe eine formularabfrage in javascript für folgende zeile:

    [COLOR=green]
    ....

    <input name="Code" type="hidden" value="<?php echo $Code; ?>">
    <input maxlength="6" name="EingegebenerCode" size="6" type="text">
    <img border="0" height="50" width="200"
    src="grafischer-code.php?Code=<?php echo$AngezeigterCode; ?>">

    ......

    if(document.formular.EingegebenerCode.value == "")
    {
    Fehlermeldung += "Dein Code fehlt!\n";
    }
    if(document.formular.EingegebenerCode.value !== "Code")
    {
    Fehlermeldung += "Der Code ist falsch!\n";
    }
    [/COLOR]

    während die abfrage ob etwas eingegeben wurde immer richtig funktioniert, sagt die abfrage nach dem richtigen code immer: der code ist falsch...auch wenn er richtig ist....ich habe schon den code als php echo$AngezeigterCode eingegeben...alles nix...
    was läuft hier falsch?

    lg - zeffmother

  • #2
    Re: formularabfage für grafischen code

    Original geschrieben von zeffmother
    sagt die abfrage nach dem richtigen code immer: der code ist falsch...auch wenn er richtig ist....
    Du hast also das Wort Code ins Eingabefeld eingegeben, um das zu prüfen?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ja, ich hatte , weil ich dachte es liegt an name="Code", auch schon ella und willi für "EingegebenerCode" geschrieben...war aber das gleiche

      Kommentar


      • #4
        Frage(n): Soll das eine Captcha Lösung sein ? Falls ja wieso mit JS und nicht serverseitig mit PHP ? Warum überträgst du den Code mit dem Form ? Kennst du $_SESSION ? Wenn du die Werte schon übertragen musst, warum nicht wenigstens mittels md5() gehashed ?
        Du siehst Fragen über Fragen.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          ja, das stimmt...aber nun hatten wir heute in einer gruppe darüber gesprochen und wollten ein vorhandenes script, was schon alle abfragen in js hatte, ergänzen und es funktionierte überhaupt nicht...jetzt habe ich mich noch einmal rangesetzt und probiert...aber ich finde den fehler nicht...

          als php-script läuft es- aber ich wollte gern eine lösung in js

          Kommentar


          • #6
            Original geschrieben von zeffmother
            ja, ich hatte , weil ich dachte es liegt an name="Code", auch schon ella und willi für "EingegebenerCode" geschrieben...war aber das gleiche
            Das ist nicht die Antwort auf meine Frage.

            Wenn du beim geposteten Code in das Eingabefeld mit dem Namen "EingegebenerCode" das Wort "Code" eintippst, sollte dein Code "funktionieren".
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              @zeffmother
              Ich glaube du hast nicht ganz verstanden worauf wahsaga hinauswollte...
              Hast du wirklich den String Code ins Eingabefeld geschrieben und es hat nicht gefunzt ? Oder hast du den generierten Code eingegeben und dich gewundert warum es nicht funzt ?

              Beim ersten Fall wäre wohl dein JS futsch von daher eher unwahrscheinlich
              Beim zweiten Fall brauchst du dich nicht wundern, denn du vergleichst die Usereingabe mit dem String Code. Und wenn dein Captchascript nicht immer Code ins Captcha schreibt...

              als php-script läuft es- aber ich wollte gern eine lösung in js
              Entschuldige aber das ist Dung von einem Vierbeiner Captchas werden eingesetzt um einigermassen zuverlässig zwischen einem Menschen und einer Maschine zu unterscheiden. Es muss eine Leistung erbracht werden, die nur von einem Menschen erfolgreich absolviert werden können sollte.
              Jetzt stell dir mal die JS Lösung vor: JS läuft auf dem Client. Der Client will das Bild mit dem Code --> PHP generiert es und liefert es aus. Jetzt muss JS irgendwie an die Info kommen wie denn der korrekte Code lautet. Wenn du jetzt nicht eine wirklich bahnbrechende OCR Umsetzung in JS gescdhrieben hast , dann kannst du diesen Code wohl nur im Quellcode unterbringen. Und dort findet ihn echt jeder nur halbwegs intelligent programmierte Bot v.a. da ihr ihn so nett in ein hidden Field gepackt habt.
              Ein weiteres Problem der JS Lösung ist es, dass du es so oder so nochmal serverseitig prüfen musst !!!! Probier mal wie einfach du einen JS Login überlisten kannst (Tipp JS einfach abschalten)

              Es kommt für so eine Aufgabe nur eine serverseitige Lösung in Frage und da bieten sich Sessions in PHP gerade perfekt an. Wenn das Bild aufgerufen wird speicherst du den Code in einer Session Var. Wenn der User das Form abschickt vergleichst du den Code aus dem Form mit dem in der Session Var gespeicherten Wert.
              Et voilà die Information des Codes verlässt den Server nie (zumindest nicht in einer für Maschinen einfach lesbaren Form).

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                Über's letzte Weekend habe ich mal an meinem alten Captcha gefrickelt und umgeschrieben. Funzt soweit wunderbar. Als zip die nötigten Bild-und Schriftdateien.
                Du kannst es mit dem Captcha soweit treiben, dass nicht einmal mehr irgendwer den Code noch lesen kann Dazu kannst du die Farbwerte anpassen indem du einerseits bei computeAvgRGB() bei der Rückgabe die Werte nach Gutdünken anpasst. Wenn du die Werte direkt zurückgibst dann entsprechen die RGB Werte dem Durchschnitt aller Pixel des Bildes. Wenn du dann noch in createCaptcha() die Farwerte der Schrift auf diesen durchschnittlichen Wert anpasst, dann ist garantiert kein Bot mehr auf der Seite (allerdings auch kein User mehr )

                Hoffe ihr oder sonst jemand kanns gebrauchen

                Gruss

                tobi

                PHP-Code:
                <?php
                session_start
                ();
                //captcha.php
                function randomString($len) {
                    
                $possible array_merge(range('a','h'),range('A','H'),range('j','z'),
                range('J','Z'),range(2,9));
                    
                shuffle($possible);
                    
                $str implode('',array_slice($possible,0,$len));
                    
                $_SESSION['captcha_spam'] = $str;
                }
                    
                function 
                createCaptcha($text){
                    
                $im_bg imagecreatefromgif($_SERVER['DOCUMENT_ROOT'].
                '/captcha/bilder/captcha-background.gif');
                    
                $color computeAvgRGB();
                    
                $red_up min(round(1.5*$color[0]),255);
                    
                $red_down max(round(0.2*$color[0]),1);
                    
                $green_up min(round(1.15*$color[1]),255);
                    
                $green_down max(round(0.15*$color[1]),1);
                    
                $blue_up min(round(1.4*$color[2]),255);
                    
                $blue_down max(round(0.2*$color[2]),1);
                    
                $txt_ttf $_SERVER['DOCUMENT_ROOT'].
                '/captcha/ttf/captcha3.ttf';
                    
                $t_x 30;
                    
                $t_y 55;
                    for(
                $i=0;$i<strlen($text);$i++){
                      
                $font_size rand(25,40);
                      
                $angle rand(-15,+15);
                      
                $red rand($red_down,$red_up);
                      
                $green rand($green_down,$green_up);
                      
                $blue rand($blue_down,$blue_up);
                      
                $versatz rand(-15,15);
                      
                imagecolorset($im_bg,90+$i,$red,$green,$blue);
                      
                $bbox imageftbbox($font_size,$angle,$_SERVER['DOCUMENT_ROOT'].
                '/captcha/ttf/captcha3.ttf',$text{$i});
                      
                imagettftext($im_bg$font_size$angle$t_x$t_y+$versatz90+$i
                $txt_ttf,$text{$i});
                      
                $width abs($bbox[0]) + abs($bbox[2]);
                      
                $t_x += $width += 3;
                    }
                    return 
                $im_bg;
                }

                function 
                computeAvgRGB(){
                  
                $res imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'].
                '/captcha/bilder/captcha-background.jpg');
                  
                $width imagesx($res);
                  
                $height imagesy($res);
                  
                $r 0;
                  
                $g 0;
                  
                $b 0;
                  for(
                $y=1;$y<$height;$y++){
                    for(
                $w=1;$w<$width;$w++){
                      
                $rgb imagecolorat($res$w$y);
                      
                $r += ($rgb >> 16) & 0xFF;
                      
                $g += ($rgb >> 8) & 0xFF;
                      
                $b += $rgb 0xFF;
                    }
                  }
                  
                $r round($r/($width*$height));
                  
                $g round($g/($width*$height));
                  
                $b round($b/($width*$height));
                  return array(
                $r-30,$g-50,$b-20);
                }

                $text randomString(5);
                header('Content-type: image/gif');
                $res createCaptcha($_SESSION['captcha_spam']);
                imagegif($res);
                imagedestroy($res);
                exit; 
                ?>


                //index.php
                <?php
                session_start
                ();
                ?>
                <html>
                <head>
                <title>
                Captcha Check
                </title>
                </head>
                <body>
                <form action="<?php echo $_SERVER['PHP_SELF'].'?'.strip_tags(SID);?>" method="post">
                <img src="/captcha/captcha.php?<?php echo strip_tags(SID);?>" /><br />
                <input type="text" name="code" /><br />
                <input type="submit" name="senden" />
                </form>
                </body>
                </html>
                EDIT:

                Ein paar Umbrüche dazu

                Angehängte Dateien
                Zuletzt geändert von jahlives; 12.06.2007, 20:41.
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  danke!

                  ja, ich hatte das versucht:
                  var codename ="<?php echo$AngezeigterCode; ?>";

                  und dann die abfrage:
                  if(document.formular.EingegebenerCode.value !== "codename")
                  {
                  Fehlermeldung += "Dein Code ist falsch!\n";
                  }

                  d.h. irgendwie die serverabfrage über php "einzuschleusen...und jetzt war ich soweit, dass man letztendlich den ganzen quellcode mit einbauen müsste....es geht nicht.

                  nun schauen wir uns in 7 tagen mal in ruhe dein script an - der eine oder andere wird dir dankbar sein - da bin ich mir sicher.

                  herzliche grüße
                  zeffmother

                  Kommentar


                  • #10
                    Original geschrieben von zeffmother
                    ja, ich hatte das versucht: [...]
                    ....es geht nicht.
                    Weil du immer noch nicht mit dem Wert der Variable, sondern dem String "codename" vergleichst.

                    Vielleicht machst du dir langsam mal den Unterschied zwischen Variablen und Strings klar ...?
                    d.h. irgendwie die serverabfrage über php "einzuschleusen...
                    Der Ansatz ist darüber hinaus natürlich genauso blödsinnig - auch da kann ein Bot den Wert ganz einfach auslesen.

                    Und der Bot interpretiert sowieso kein Javascript - das heisst, der schickt dein Formular in jedem Fall ab (bzw. er wird in den allermeisten Fällen nicht mal sowas wie ein "Formular" kennen, sondern dir einfach einen POST-Request schicken).
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      @zeffmother
                      Du serverseitige Prüfung des Codes steht hier nirgends, die müsstet ihr noch umsetzen (sind aber nur wenige Zeilen)

                      Gruss

                      tobi
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        Original geschrieben von jahlives
                        Du serverseitige Prüfung des Codes steht hier nirgends, die müsstet ihr noch umsetzen (sind aber nur wenige Zeilen)
                        OffTopic:
                        Na dann bleibt ihm ja wenigstens noch was, woran er verständnismäßig erneut scheitern kann.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          PHP-Code:
                          if(isset($_POST['code'],$_POST['senden']) && $_POST['code'] == $_SESSION['captcha_spam']){
                            
                          //alles okay
                          }else{
                            
                          //Formular wieder ausgeben

                          OffTopic:

                          Damit er nicht erneut scheitern muss

                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            @wahsaga:
                            was quatschst du die erklärung von jahlives nach...halte dich einfach raus, wenn ein netter mensch einem anderen hilft. wir hatten da schon unsere differenzen.....ich mag dich nicht und du darfst mich auch ignorieren!

                            @jahlives: danke

                            Kommentar


                            • #15
                              Original geschrieben von zeffmother
                              was quatschst du die erklärung von jahlives nach...
                              Ich quatsche nicht nach.

                              Ich habe schon in der ersten Antwort versucht, dich darauf hinzuweisen, wo dein problem liegt - dir fehlt(e) nur leider das Wissen, dass auch zu begreifen.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X