[PHP5] Zufallscode wird immer falsch gewertet

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

  • [PHP5] Zufallscode wird immer falsch gewertet

    Grüsst euch ...

    seit kurzem wird mein gästebuch mit spameinträgen zugemüllt. bisher habe ich die manuel gelöscht. heute habe ich jedoch ein zufallscode hinzugefügt. doch leider finde ich den fehler nicht, der mir immer sagt, das ich einen falschen code eingegeben habe, obwohl ich ihn richtig eintippte.

    wäre um unterstützung wirklich sehr dankbar.

    hier um das gästebuch:

    Das Gästebuchscript:
    PHP-Code:
    <form name="gastbuch" method="post" id="formular" action="<?php echo $_SERVER['PHP_SELF']?>">
    <table width="520" border="0">
    <tr>
      <td width="110">Name:</td>
      <td width="400"><input name="name" type="text" maxlength="50"></td></tr>
    <tr>
      <td align="left" valign="top">Eintrag:</td>
      <td><textarea name="text" cols="35" rows="10" maxlength="500"></textarea></td></tr>
    <tr>
      <td align="left" valign="top">Code eingeben:</td>
    <td>
    <div align="left">
    <?PHP
    echo 
    '<img src="include/code.php?'.session_name().'='.session_id().'" height="25" width="100" style="border:0; padding:0;">
    <INPUT TYPE="TEXT" NAME="new_code" SIZE="20" MAXLENGTH="6">'
    ;?>
    </div></td></tr>
    <tr>
      <td align="left" valign="top">Absenden:</td>
      <td><div align="left"><input name="submit" type="submit" value="eintragen"></div></td>
    </tr>
    </table>
    </form>
    </div>
    <div class="inhalt">
    <?php
    if($_POST['new_code'] != $_SESSION['new_code2']) { 
       die(
    "Falscher Code!"); 
    }
    // Dateipfad in der die Einträge abgespeichert werden
    $datei "gaestebuch.txt";
    // sind der Name und Text eingetragen?
    if (isset($_POST['name']) && $_POST['text'] != "" && $_POST['code'] !="") {
      
    $name $_POST['name'];
      
    $text $_POST['text'];
      
    // Datei wird zum schreiben und lesen geöffnet
      
    $zeiger fopen($datei"r+");
      
    // alte Daten herauslesen und in $alt sichern
      
    $alt fread($zeigerfilesize($datei));
      
    // HTML-Zeichen maskieren, Slashes entfernen, Zeilenumbrüche erhalten
      
    $name htmlspecialchars($name);
      
    $name stripslashes(nl2br($name));
      
    $text htmlspecialchars($text);
      
    $text stripslashes(nl2br($text));
      
    $code htmlspecialchars($name);
      
    $code stripslashes(nl2br($name));
      
    // Eintrag "zusammensetzen"
      
    $eintrag="<h2>$name</h2>\n$text\n";
      
    // Cursor sringt zum Anfang
      
    rewind($zeiger);
      
    // neue Eintrag vor den alten Eintrag schreiben:
      
    fputs($zeiger"$eintrag \n $alt");
      
    // Datei wieder schließen
      
    fclose($zeiger);
    }
    // Anzeigen des Gaestebuch
    readfile($datei);?>
    hier der include-code dazu:
    PHP-Code:
    <?php
    session_start
    ();
    $chars "qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM1234567890";    
    $code "";
    for (
    $i=1$i<7$i++)
    {
      
    $code $code.$chars[mt_rand (0,strlen($chars)-1)];
    }
    $_SESSION['new_code2'] = $code;

    Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
    Header("Content-type: image/jpeg"); 
    $pic=ImageCreate(100,25); //(breite, höhe) 
    $col1=ImageColorAllocate($pic,255,255,255); 
    $col2=ImageColorAllocate($pic,138,138,138); 
    ImageFilledRectangle($pic0010025$col2); 
    ImageRectangle($pic119823$col1);
    for (
    $i 0$i 6$i++)
    {
        
    ImageString($picmt_rand(35), (14*$i+10), mt_rand(36), substr($code$i1), $col1); 
    }
    ImageJPEG($pic); 
    ImageDestroy($pic); 
    ?>
    vielen dank vorher schon einmal.

    mfg meik schmidt
    Zuletzt geändert von meikschmidt; 06.12.2006, 21:40.
    An den unerwarteten Momenten erwartet einen das unerwartete unerwartet

  • #2
    brich deinen code um - vertikaler scrollbalken!

    habe mir den quelltext angesehen:
    <img src="include/code.php?PHPSESSID=" height="25" width="100"

    es wird keine session-id übergeben. hast du session_start() am anfang?

    Kommentar


    • #3
      in der code.php ist ja das
      PHP-Code:
      session_start(); 
      gleich am anfang. aber geht immer noch nicht
      An den unerwarteten Momenten erwartet einen das unerwartete unerwartet

      Kommentar


      • #4
        Original geschrieben von meikschmidt
        in der code.php ist ja das
        PHP-Code:
        session_start(); 
        gleich am anfang. aber geht immer noch nicht
        Und im Gästebuchscript? In deinem Code(-Ausschnitt) jedenfalls nicht.
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          wenn ich das dann aber gleich am anfang mit eintrage, dann bekomme ich gleich schon wenn ich die gästebuchseite anwähle, die meldung das ich den code falsch angegeben hab. wo muss diese zeile denn dann genau hin?
          danke schon mal für eure bisherige hilfe

          mfg meik schmidt
          An den unerwarteten Momenten erwartet einen das unerwartete unerwartet

          Kommentar


          • #6
            Hast du die Zeile dann nur im Gästebuchskript oder auch in der code.php?
            Nieder mit der Camel Case-Konvention

            Kommentar


            • #7
              in beiden.

              Das siht jetzt so aus

              die include code.php
              PHP-Code:
              <?php
              session_start
              ();
              $chars "qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM1234567890";    
              $code "";
              for (
              $i=1$i<7$i++)
              {
                
              $code $code.$chars[mt_rand (0,strlen($chars)-1)];
              }
              $_SESSION['new_code2'] = $code;

              Header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
              Header("Content-type: image/jpeg"); 
              $pic=ImageCreate(100,25); //(breite, höhe) 
              $col1=ImageColorAllocate($pic,255,255,255); 
              $col2=ImageColorAllocate($pic,138,138,138); 
              ImageFilledRectangle($pic0010025$col2); 
              ImageRectangle($pic119823$col1);
              for (
              $i 0$i 6$i++)
              {
                  
              ImageString($picmt_rand(35), (14*$i+10), mt_rand(36), substr($code$i1), $col1); 
              }
              ImageJPEG($pic); 
              ImageDestroy($pic); 
              ?>
              Gästebuchscript (vollständig):

              PHP-Code:
              <form name="gastbuch" method="post" id="formular" action="<?php echo $_SERVER['PHP_SELF']?>">
              <table width="520" border="0">
              <tr>
                <td width="110">Name:</td>
                <td width="400"><input name="name" type="text" maxlength="50"></td></tr>
              <tr>
                <td align="left" valign="top">Eintrag:</td>
                <td><textarea name="text" cols="35" rows="10" maxlength="500"></textarea></td></tr>
              <tr>
                <td align="left" valign="top">Code eingeben:</td>
              <td>
              <div align="left">
              <?PHP
              echo 
              '<img src="include/code.php?'.session_name().'='.session_id().'" height="25" width="100" style="border:0; padding:0;">
              <INPUT TYPE="TEXT" NAME="new_code" SIZE="20" MAXLENGTH="6">'
              ;?>
              </div></td></tr>
              <tr>
                <td align="left" valign="top">Absenden:</td>
                <td><div align="left"><input name="submit" type="submit" value="eintragen"></div></td>
              </tr>
              </table>
              </form>
              </div>
              <div class="inhalt">
              <?php
              session_start
              ();
              if(
              $_POST['new_code'] != $_SESSION['new_code2']) { 
                 die(
              "Falscher Code!"); 
              }
              // Dateipfad in der die Einträge abgespeichert werden
              $datei "gaestebuch.txt";
              // sind der Name und Text eingetragen?
              if (isset($_POST['name']) && $_POST['text'] != "" && $_POST['code'] !="") {
                
              $name $_POST['name'];
                
              $text $_POST['text'];
                
              // Datei wird zum schreiben und lesen geöffnet
                
              $zeiger fopen($datei"r+");
                
              // alte Daten herauslesen und in $alt sichern
                
              $alt fread($zeigerfilesize($datei));
                
              // HTML-Zeichen maskieren, Slashes entfernen, Zeilenumbrüche erhalten
                
              $name htmlspecialchars($name);
                
              $name stripslashes(nl2br($name));
                
              $text htmlspecialchars($text);
                
              $text stripslashes(nl2br($text));
                
              $code htmlspecialchars($name);
                
              $code stripslashes(nl2br($name));
                
              // Eintrag "zusammensetzen"
                
              $eintrag="<h2>$name</h2>\n$text\n";
                
              // Cursor sringt zum Anfang
                
              rewind($zeiger);
                
              // neue Eintrag vor den alten Eintrag schreiben:
                
              fputs($zeiger"$eintrag \n $alt");
                
              // Datei wieder schließen
                
              fclose($zeiger);
              }
              // Anzeigen des Gaestebuch
              readfile($datei);?>
              An den unerwarteten Momenten erwartet einen das unerwartete unerwartet

              Kommentar


              • #8
                Pack session_start bitte mal ganz an den Anfang deiner Datei. Bei Cookie-basierten Sessions musst das ohnehin so sein, soweit ich weiß. Zumindest vor jeglicher Ausgabe.
                Nieder mit der Camel Case-Konvention

                Kommentar


                • #9
                  leider auch das gleiche. ich habe sie auch aus der code.php mal herausgenommen, und nur im gästebuch script. mit dem gleichen ergebnis.
                  An den unerwarteten Momenten erwartet einen das unerwartete unerwartet

                  Kommentar


                  • #10
                    Original geschrieben von meikschmidt
                    ich habe sie auch aus der code.php mal herausgenommen, und nur im gästebuch script.
                    session_start() muss in allen dateien erfolgen, die die selbe session benutzen möchten (mal abgesehen von weiteren includes).
                    session_start() sollte grundsätzlich an erster stelle der datei erfolgen, bevor eine ausgabe erfolgte.

                    Kommentar


                    • #11
                      das habe ich verstanden. aber wenn ich genau diese zeile, egal wo einfüge, ob an anfang oder dazwischen, kommt immer gleich bei seitenanwahl die fehlermeldung, als wenn dann schon ein code eingegeben wurde.

                      http://www.schmidt-meik.de/gaestebuch.php
                      An den unerwarteten Momenten erwartet einen das unerwartete unerwartet

                      Kommentar


                      • #12
                        if($_POST['new_code'] != $_SESSION['new_code2']) {
                        die("Falscher Code!");

                        wenn das formular nicht abgeschickt wurde, ist post ja auch leer.

                        error_reporting(E_ALL); zum debuggen anschalten!

                        Kommentar


                        • #13
                          In dem Zusammenhang: am besten immer mit isset() überprüfen, ob die Variablen überhaupt existieren, bevor miteinander verglichen wird. Ich glaube mich zu erinnern, dass jemand denselben Fehler gemacht hat und die optische Überprüfung über ein fremdes Formular umgangen werden konnte, da somit beide Variablen NULL und demnach auch nicht ungleich sind...
                          Nieder mit der Camel Case-Konvention

                          Kommentar


                          • #14
                            das ist leider etwas alles noch zu hoch für mich. ich bin ja gerade froh ein gästebuch hinbekomen zu haben. aber da muss ich dann doch wohl mal einen vor ort fragen, der mir das alles an die richtige stelle einfügt.

                            trotzdem allen dank

                            mfg meik schmidt
                            An den unerwarteten Momenten erwartet einen das unerwartete unerwartet

                            Kommentar


                            • #15
                              Einfach
                              PHP-Code:
                              if (isset($_POST['captcha_code'], $_SESSION['captcha_code']))
                              {
                                  if (
                              $_POST['captcha_code'] != $_SESSION['captcha_code'])
                                  {
                                      die;
                                  }
                              } else {
                                  die;

                              Das löst dein Problem zwar nicht, behebt aber einen "kleinen" Logikpatzer und damit eine eventuelle Sicherheitslücke.
                              Zuletzt geändert von Griecherus; 06.12.2006, 23:33.
                              Nieder mit der Camel Case-Konvention

                              Kommentar

                              Lädt...
                              X