kostenloser Webspace werbefrei: lima-city


Schlechte Captcha Qualität

lima-cityForumDie eigene HomepageHomepage Allgemein

  1. Autor dieses Themas

    fp08

    fp08 hat kostenlosen Webspace.

    Halloo

    ich hoffe ich bin hier im richtigen Thema..

    Ich hab das Captcha jetzt endlich zum Laufen bekommen. Allerdings ist die Qualität des erzeugten JPGs sehr mies.

    So sieht das erzeugte Bild aus:
    http://img199.imageshack.us/img199/823/unbenannt3kopier.jpg

    und so hab ich den Hintergrund eigentlich abgespeichert:
    http://img692.imageshack.us/img692/9104/captchah.png

    Kann man das nicht irgendwo einstellen?

    Lg Pami
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wie erstellst du das captcha? PHP?


    Falls es PHP ist musst du es wohl so einstellen:
    $qualitaet = 50 //Zahl zwischen 1 - 100 -> 100 Höchste Qualität, 1 Niedrigste Qualität
    
    imagejpeg($image, dateiname.jpg, $qualitaet) )


    Du kannst ausprobiern welche qualität die Beste ist.
  4. Falls Du das Bild mittels PHP veränderst, kann das u.a. auch an einem imagecopy()-Befehl liegen. Bessere Resultate liefert imagecopyresampled().

    Ich empfehle Dir aber, das Hintergrundbild als PNG abzuspeichern und das Captcha darauf basierend als image/png ohne Komprimierung bereitzustellen
  5. Autor dieses Themas

    fp08

    fp08 hat kostenlosen Webspace.

    aklasse:
    habs mal so ausprobier wie dus gesagt hast.
    hier mal der ganze code:
    <?php
    // Session starten
    session_start();
    // Alten CAPTCHA-Code aus der Session loeschen
    unset( $_SESSION['captcha_code'] );
     
    // Das Cachen der Grafik verhindern
    header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
    header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
    header( "Cache-Control: no-store, no-cache, must-revalidate" );
    header( "Cache-Control: post-check=0, pre-check=0", false );
    header( "Pragma: no-cache" );
     
    // Dem Browser mitteilen das es sich hierbei um ein JPG handelt.
    header( 'Content-type: image/jpeg' );
     
    // Sicherheitscode generieren
    $AlphaNumerischerString = "ABCDEFGH2345689";
    $ZufallString1 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
    $ZufallString2 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
    $ZufallString3 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
    $ZufallStringKomplett = $ZufallString1.$ZufallString2.$ZufallString3;
     
    // Sicherheitscode in der Session speichern
    $_SESSION['captcha_code'] = md5( $ZufallStringKomplett );
     
    // Grafik erzeugen und an den Browser senden
    $Schriftarten = array( "FABIN.TTF", "rafika.ttf", "MUDSHAKE_83.ttf");
    $Bilddatei = imagecreatefrompng( "captcha.png" );
    $TextFarbe1 = imagecolorallocate( $Bilddatei, 131, 131, 131 );
    $TextFarbe2 = imagecolorallocate( $Bilddatei, 130, 70, 90 );
    $TextFarbe3 = imagecolorallocate( $Bilddatei, 180, 90, 190 );
    imagettftext( $Bilddatei, 24, 15, 3, 24, $TextFarbe1, $Schriftarten[0], $ZufallString1 );
    imagettftext( $Bilddatei, 24, 0, 26, 15, $TextFarbe2, $Schriftarten[0], $ZufallString2 );
    imagettftext( $Bilddatei, 24, -20, 53, 18, $TextFarbe3, $Schriftarten[0], $ZufallString3 );
    imagejpeg( $Bilddatei, captcha.jpg, 75 ); 
     
    // Grafik zerstören und Speicher freigeben
    imagedestroy( $Bilddatei );
    ?>


    allerdings wird jetzt garkein Bild mehr angezeigt. Also nur der Alternativ-Text.


    mitsche:
    einen imagecopy()-Befehl finde ich nirgends. Das Hintergrundbild ist als png abgespeichert. Was genau meinst du mit Captcha darauf basierend als image/png ohne Komprimierung bereitzustellen? Aus jpg überall png machen? Damit das generierte Bild auch eine png-Datei ist?


    Beitrag zuletzt geändert: 7.7.2010 15:30:39 von fp08
  6. er meint, dass du das Bild als png ausliefern sollst, sprich aus
    imagejpeg($Bilddatei, captcha.jpg, 75 );
    machst du:
    imagepng($Bilddatei, captcha.jpg, 9);

    und das imagedestroy kannst du dir sparen, sobald das script zuende ist, wird der speicher eh wieder freigegeben und da ich davon ausgehe, dass nach der Ausgabe eines Bildes das script durch ist, kannst du es weglassen.

    Eine andere Sache, warum benutzt du ein captcha, es gibt so viele semantischere Möglichkeiten um Spam etc. zu vermeiden, und abgesehen davon, wenn ich deine Seite unbedingt cracken will, dann hält mich auch dein kleines bildchen nicht auf... ist einfach so und wenn ich mir dazu eine eigene OCR-Software schreiben müsste.

    Um mal eine alternative zu nennen, ich hab dazu schonmal was geschrieben: Sicherheitscode in Gästebuch einbauen

    lies es dir mal durch, funktioniert ähnlich, aber es braucht nur den Verstand eines Menschen, auch blinde, oder Menschen mit spastischen Behinderungen können diese Aufgaben lösen, eine Sache, welche bei captchas nie gewährleistet ist!
  7. Hallo

    ersetze:
    $Bilddatei = imagecreatefrompng( "captcha.png" );


    durch:
    $dstimage = imagecreatetruecolor ($width,$height);
    $srcimage = imagecreatefrompng ( "captcha.png" );
    $Bilddatei = imagecopyresampled ($dstimage,$srcimage,0,0,0,0, $width,$height,$width,$height);


    nicht getestet, aber so in der Art (oder so ähnlich)

    1. neues TrueColorImgae erstellen
    2. captcha in $srcimage laden
    3. Bild: kopiere $srcimage in $dstimage

    dann hast Du TrueColor,
    vorher eigene $width und $height definieren (oder durch Werte ersetzen)
    .

  8. Autor dieses Themas

    fp08

    fp08 hat kostenlosen Webspace.

    nemoinho:

    habs mit imagepng versucht und es klappt :) Vielen Dank
    Also wie so Spambots genau funktionieren weis ich auch nicht genau. Aber ich denke wenn man zB 3 Fragen nimmt aktualisiert man die Seite so oft, bis man alle 3 weis. Und dann programmiert man bei der Frage die Antwort usw. Weis nicht wie ichs erklären soll. Aber ich denke solche Fragen bringen nicht viel...

    tauban:
    klappt wigesagt auch mit imagepng aber trotzdem danke für deine Mühe !
  9. Doof nur das ich das selbe auch von Captchas sagen kann, ich ruf die Seite einfach oft genug auf, bis ich so ziemlich alle möglichen Textzeichen kenne und dann ahme ich die Captchabestätigung mittels OCR nach.
    Oder anders gesagt:
    1.) Ein Sicherheitsmechanismus alleine bringt meistens eh nichts;
    2.) Es gibt nur sehr wenige Bots, die auf bestimmte Seiten zugeschnitten sind und dabei handelt es sich vor allem um Bots, die z.B. google-mail knacken sollen oder ähnliches (dazu gibt es auch interessante Berichte, wie die cracker versucht haben das mittels Sexseiten von echten Menschen ausfüllen zu lassen)
    3.) Captchas haben wie ich schon sagte erhebliche Nachteile, auch gegenüber echten Menschen!

    Außerdem kann man mit solchen vereinfachten Methoden dem User sogar den Gebrauch des Formulars erleichtern, indem man die Frage z.B. etwas verschlüsselt von JS ausfüllen lässt, funktioniert relativ gut:
    Zum Beispiel hast du die Frage "Nenne eine Farbe der deutschen Fahne",
    <form action="verarbeite-post" method="post">
      <p>
        <label for="frage">Nenne eine Farbe der deutschen Fahne</label>
        <input name="frage" id="frage" value="" />
      </p>
    </form>
    dazu stellst du als Antworten "schwarz", "rot", "gold", "gelb" bereit, und ins JS kommt folgendes:
    var frageInput = document.getElementById('frage'),
        // dekodiert ergibt die Antwort "rot"
        antwort = ['t', '\u006f', String.fromCharCode(114)].reverse().join('');
    frageInput.value = antwort;
    frageInput.parentNode.style.display = 'none';
    Auf diese Weise würdest du dem User "Arbeit" abnehmen (sofern JS aktiviert ist), was einem plus an Usability entspricht und falls JS deaktiviert ist, ist das immernoch kein Beinbruch, denn der Anwender kann die Frage ja immernoch beantworten, selbst wenn er blind ist.

    Um nun weitere Ausschlussverfahren für den Nutzer zu haben, kann man noch eine Zeitmessung vornehemen, wie lange der Nutzer gebraucht hat, um den Text zu schreiben und abzuschicken, außerdem kann man auf dem Server noch gegen eine "blacklist" die IP überprüfen und auf etwailige Zeichenketten prüfen, usw. usf.
    Es gibt also weit mehr Möglichkeiten als nur ein Captcha, wobei ein Captcha wohl die unzugänglichste, wenn auch leider verbreitetste ist.

    Hier ist übrigens mal ein Beispiel, für ein Kontaktformular, komplett ohne captcha, dafür mit 6 anderen Sicherheitsmaßnahmen:
    http://nemoinho.lima-city.de/englische-grammatik/kontakt.html

    Insgesamt habe ich für das Formular 7 geplant, aber bisher nur diese umgesetzt, wenn du einfach mal ein paar mutwillige Falscheingaben machst, solltest du für 5 der 6 Sicherheitssperren eine eigene Fehlermeldung bekommen, falls du das nicht schaffst, spricht das dafür, dass die Sperren für Bots und nicht für Menschen gedacht sind!

    Beitrag zuletzt geändert: 9.7.2010 19:23:35 von nemoinho
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!