kostenloser Webspace werbefrei: lima-city


Prob mit Sicherheitscode

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s****l

    ich hab ein problem mit dem sicherheitscode von meinem gästebuch (ich denke jeder weiß was ich mit sicherheitscode meine: ein zufälliges bild mit buchstaben drauf wird angezeigt und man muss die buchstaben oder auch zahlen abtippen um einen eintrag zu machen [zum schutz gegen automatisierte einträge])
    also ich hab das so gemacht:
    ...
            if (!($code == $richtigercode) OR empty($code))
            {
                $fehler .= "<br>&bull;Der Sicherheitscode ist falsch, achte auch auf die Groß- und Kleinschreibung!";
            }
    ...
                srand(microtime()*1000000);
                $code = rand(1,7);
                switch ($code)
                {
                    case 1:
                        echo "<img src=\"http://scrawl.lima-city.de/guestbook/code1.jpg\">";
                        $richtigercode = "FEHD";
                        break;
                    case 2:
                        echo "<img src=\"http://scrawl.lima-city.de/guestbook/code2.jpg\">";
                        $richtigercode = "7ELP";
                        break;
                    case 3:
                        echo "<img src=\"http://scrawl.lima-city.de/guestbook/code3.jpg\">";
                        $richtigercode = "U64D";
                        break;
                    case 4:
                        echo "<img src=\"http://scrawl.lima-city.de/guestbook/code4.jpg\">";
                        $richtigercode = "74HN";
                        break;
                    case 5:
                        echo "<img src=\"http://scrawl.lima-city.de/guestbook/code5.jpg\">";
                        $richtigercode = "3JS6";
                        break;
                    case 6:
                        echo "<img src=\"http://scrawl.lima-city.de/guestbook/code6.jpg\">";
                        $richtigercode = "6L3N";
                        break;
                    case 7:
                        echo "<img src=\"http://scrawl.lima-city.de/guestbook/code1.jpg\">";
                        $richtigercode = "2MX8";
                        break;
                }
    ...
    // und das is jetzt klar:
            <input name="code" size="6" maxlength="4">

    dummerweise bekomme ich aber immer die meldung, der code sei falsch, auch wenn ich den richtigen code eingebe!
    oder gäbe es da vielleicht noch eine ganz andere, elegantere lösung?

    Beitrag geändert: 6.6.2007 18:22:45 von scrawl
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Also du musst die variable $richtigercode schon irgendwie übergeben
    zuden würde ich diesen Therm sicherheitshalber noch anderst formulieren
    if (!($code == $richtigercode) OR empty($code))

    eher So:
    if (($code != $richtigercode) OR empty($code))

    Eleganter geht es wenn du wirklich zufällige Zahlen und Buchstaben nimmst und die über die gd Bibliotek Dynamisch in eine Grafik einfügen lässt.

    Beitrag geändert: 6.6.2007 18:30:01 von keiax
  4. Autor dieses Themas

    s****l


    Also du musst die variable $richtigercode schon irgendwie übergeben
    zuden würde ich diesen Therm sicherheitshalber noch anderst formulieren
    if (!($code == $richtigercode) OR empty($code))

    eher So:
    if (($code != $richtigercode) OR empty($code))


    achso, dann hat warscheinlich das ausrufezeichen beide bedingungen der OR-verknüpfung negiert!
    edit: anscheinend doch nicht, hab es geändert und es klappt immer noch nicht:confused:
    und die variable $richtigercode wurde ja durch die switch-anweisung übergeben, oder darf man da pro case nur 1 aktion hinschreiben?

    Beitrag geändert: 6.6.2007 18:35:54 von scrawl
  5. Mal ehrlich: Was bringt das? Gar nichts.
    1. Wieso glaubst du, sollte sich jemand die mühe machen, dein GB automatisch Vollspammen zu lassen?
    2. Hast du den Sinn von dem ganzen Begriffen? In einem guten GB werden diese Bilder automatisch erzeugt und sind desshalb für ein fremdes Programm fast nicht auslesbar (nicht unmöglich). Gibt einen Namen dafür, aber der fällt mir gerade nicht ein. Wenn schon jemand dein GB automatisch Vollspammen lassen würde, müsste das Programm nur noch den Link zum Bild auslesen und weiss dann den richtigen Code.
    3. Das nerft nur die Leute, die wirklich etwas schreiben wollen.
    4. Mach doch ne IP-Sperre (oder ein Plätzchen, wenn du Hunger hast) das die Anzahl Einträge pro tag beschränkt. Ok, kann man umgehen, aber sogar die ""richtigen"" Code-Bildchen (der name liegt mir auf der zunge) kann man umgehen. Aber irgendwann ist der Aufwand zu gross, da geht man lieber auf eine andere Seite und sucht dort ein paar Sicherheitslücken.
  6. m**********r

    Diese Code Bildchen heißen auch Capchas! Es gibt aber auch vorgefertigte Scripte für eine Captcha überprüfung!
  7. so @ nigolaz: es gibt immer Leute die das in
    kleinen Schritten machen und das macht meiner
    meinung nach viel (!!) Sinn! Da es dann leichter
    zu verstehen ist. Und warum er es macht ist
    eindeutig nicht deine Sache!

    @ code:
    also ähm ich würde die switch() über der
    if machen weil er ja sonst die variablen
    nicht weiß. und dann musst natürlich den
    eingegebenen Wert per $_POST übergeben aber
    das wirst du eh wisssen da du eine GB hast

    -> weitere Fragen -> ICQ
  8. Autor dieses Themas

    s****l


    also ähm ich würde die switch() über der
    if machen weil er ja sonst die variablen
    nicht weiß.

    :confused: naja icq

    und dann musst natürlich den
    eingegebenen Wert per $_POST übergeben

    bei mir funzt es auch immer ohne $_POST['variable']

  9. bei mir funzt es auch immer ohne $_POST['variable']


    hmm ... dann hast das auf einem Server drauf
    wo global_vars on ist in der php.ini . Ist trotzdem
    nicht fein programmiert weil das eine riesen
    system-fehler-lücke ist.

    und zu dem switch-
    vorher hast du die $richtigercode abgefragt
    bevor du sie überhaupt gesetzt hast! Außerdem .
    musst du den richtigen Code per session/cookie/
    hidden-feld mit geben sonst weiß das Programm
    mit den $_POST daten nicht welcher der richtige
    Code vom letzten mal war. da wenn die $_POST vars
    abgesendet werden reoloaded wird!


  10. bei mir funzt es auch immer ohne $_POST['variable']

    hmm ... dann hast das auf einem Server drauf
    wo global_vars on ist in der php.ini . Ist trotzdem
    nicht fein programmiert weil das eine riesen
    system-fehler-lücke ist.

    Nicht nur schlecht programmiert (Da nicht portabel) sondern auch eine lücke im schlecht konfigurierten PHP-Server
    Ich würde übrigends überlegen nur den MD5 Hash der richtigen Zahl zu übergeben ... da auch Post variablen ausgelesen und manipuliert werden können.
    So kann ein etwaiger bot aber nur seine eigen eingabe, nicht aber die generierte Zufallszahl in der POST Anweisung im klahrtext sehen (klahr geht dass auch noch zu knacken, aber dazu muss dann schon ein Mensch drann sitzen der erkennt dass es sich um so einen Trick handelt.

    Andere Möglichkeit, sind IP und Wort Filter.
    Lege dir eine Blacklist von Wörtern an, die in deinem GB nichts zu suchen haben ... und dann eine Zeitblockierung die nur z.B. nur 3 Posts innerhalb von 10 min oder 30 min erlaubt.
  11. moin,

    echo '<img src=\'http://scrawl.lima-city.de/guestbook/code1.jpg\'>';


    Warum nicht einfach src=""? Und warum ein absoluter Link, /guestbook/code1.jpg oder sogar code1.jpg reicht doch.

    Zum Captcha (so heißen solche die): wie sirseven ja schon gesagt hat: Du fragst die Variable $richtigercode ab bevor du sie gesetzt hast. Errechne (zb mit md5($richtigercode. "irgendeingeheimertext") einen Kontrollwert, den du dem Client mitgibst und hinterher guckst, ob du mit dem eingegebenen Text auf den gleichen Wert kommst.

    Zu $code vs $_POST['code']: Lies mal bitte http://php.net/register_globals (wenn du einigermaßen englisch kannst, nimm die englische Version, die Übersetzung ist sehr schlecht) (und verwende danach nur noch die $_(GET|POST|REQUEST)-Variablen)

    grüße, maix
  12. Hmm also ich finde es schön, dass du versuchst, so ein captcha nachzubilden.
    Allerdings ist die Programmierung nicht die Beste ;-)

    Mal so gefragt... was möchtest du erreichen?

    Das Menschen es schwerer haben oder dass keine Einträge von Maschinen gemacht werden können?
    Wenn du es den Menschen schwerer machen möchtest ist der Code soweit ok, doch für Maschinen nicht ausreichend.

    Um dir dies zu verdeutlichen ein paar Überlegungen...
    Was kann eine Maschine und was erkennt eine Maschine?
    ...Nun als erstes schaut eine Mschine nicht so wie ein Mensch auf die Internetseite... die Maschine kann nur den Quellcode auslesen.
    Bei deinem Script ist es derzeit so, dass im Quellcode steht: "<img src=.../code1.jpg >" Was macht also der Angreifer?...er füttert seine Maschine mit der Regel ("Wenn code1.jpg gefunden dann tippe FEHD") usw.
    Wenn er damit fertig ist, kann er wunderschön spamen.


    Wie kann man das verhindern?
    Indem man die Grafik dynamisch erzeugt ;-) ...PHP liefert die Funktionen gleich mit ;-) (siehe http://de.php.net/manual/de/ref.image.php )

    Dann hat man immer den gleichen Dateinamen und der Angreifer weiß nicht durch den Quellcode was auf dem Bild ist.

    Aber auch wenn man die Grafik nun dynamisch erstellt ist man nicht sicher... mittlerweile kann man diese Captchas analysieren und erhält so den Code.
    Eine gute Seite dazu ist http://sam.zoy.org/pwntcha/

    Ansonsten viel Erfolg.
    Denn nur wenn man selbst programmiert lernt man ;-)


  13. Autor dieses Themas

    s****l

    Danke für die Antworten ;)

    Warum nicht einfach src=''? Und warum ein absoluter Link, /guestbook/code1.jpg oder sogar code1.jpg reicht doch.

    da ich das teil über guestbook/guestbook.php teste, es später aber in den index include ;)

    ... die ganzen erklärungen davor
    und verwende danach nur noch die $_(GET|POST|REQUEST)-Variablen

    jo, mach ich jetzt mittlerweile ;)

    Wie kann man das verhindern?
    Indem man die Grafik dynamisch erzeugt ...PHP liefert die Funktionen gleich mit (siehe http://de.php.net/manual/de/ref.image.php )

    jo, ich hab auch nen buch da schlage ich mal nach
  14. 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!