Probleme mit der Sicherheitsabfrage:

Hier werden Probleme rund um das Zahlen Captcha behandelt

Moderator: frameguard

Probleme mit der Sicherheitsabfrage:

Beitragvon kuenca » 13.04.2007, 11:40

Hi, habe den Code nun nach besten Wissen und Gewissen eingebaut, komme aber trotzdem nicht auf einen grünen Zweig.
Folgendes Konstrukt:
gbook.php wird über ein include in die index geladen. die action für das insert liegt in der gb.php, dort mach ich auch die abfrage...
wo kann der fehler liegen?
Code: Alles auswählen
index.php

<?

session_start();
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode($result);
}
$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "7e34a7s1a");
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if(isset($_SESSION['captcha_spam']) AND $sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);}

$s = $_GET['s'];

$keys = array_keys($_GET);
foreach ($keys as $key) {
$$key = $_GET[$key];

}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<a name="top"></a>
......
<table width="96%" border="0" cellpadding="0" cellspacing="0" background="images/tura.gif" >
<tr>
<td valign="top" class="text" background="images/infbg.jpg">
<div align="center">
<?

if (!isset($s) || empty($s)) $s = "main";
include "inc/".$s.".php";
?>
</div>
</td>
...
</html>

Code: Alles auswählen
gbook.php
<?php
$s = $_GET['s'];
   if(isset($_GET['show_entries'])) $entries = (int)$_GET['entries'];
   else $show_entries = 1;

    require("inc/gb/sql.php");

   // Einträge pro Seite
    $max_einträge = 10;

    $abfrage_gb = "SELECT name,datum,zeit,eintrag FROM $table ORDER BY datum DESC, zeit DESC LIMIT ".(($show_entries-1) * $max_einträge).", $max_einträge";
    $erg_gb = mysql_db_query($database,$abfrage_gb,$verbindung);
   ?>
<p align="left"><b><span class="topic"><br>
   <font color="#1149e9">Gästebuch</font></span></b><br>
   <a href="#eintrag">Hinterlassen sie ihr Feedback</a><br><br>

         <?php
               // Anzahl aller Datensätze ermitteln
                         $anzahl_alle = mysql_fetch_row(mysql_query("SELECT count(*) as 'anzahl_alle' FROM $table"));
                      echo "Insgesamt: ".$anzahl_alle[0]. " Einträge vorhanden <br><br>---------------------------------------------------";
         ?>
</p>

<table align="left" class="text" width="100%">

          <?php


            while (list($name,$datum,$zeit,$eintrag) = mysql_fetch_row($erg_gb))
            {


              echo "<tr><td align=left>";
               echo "<b><span class=gbtopic><u>".$name."</u></span></b><br><br>";


               echo "$eintrag <br><br>";
              echo "<font size=1> <i>geschrieben am ".date('d.m.Y',strtotime($datum) )." um ".$zeit." Uhr:</i></font></b><br>";
               echo "---------------------------------------------------<br><br> ";
               echo "</td></tr>";
             }

            echo "<tr><td align=left class=text>Seite";

              $seitenzahl = ceil($anzahl_alle[0] / $max_einträge);
              if ($show_entries > 1) echo "<a href='?s=gb/gbook&show_entries=".($show_entries-1)."'>&laquo;</a>";
              for ($i = 1;$i <= $seitenzahl; $i++){
              if($i != $show_entries) echo " <a href='?s=gb/gbook&show_entries=$i'>$i</a>";
              else echo " <b><u>$i</u></b>";
         }

            if($show_entries < $seitenzahl)  echo " <a href='?s=gbook&show_entries=".($show_entries+1)."'>&raquo;</a>";

         ?>
            </td>
         </tr></td>
         <?php
            mysql_close($verbindung);
         ?>
      </td>
   <tr>
   <td align="left"  class="text">
   <a name="eintrag"></a>
   <p class="text">
      Hier können sie ihren Eintrag hinterlassen (IP wird gespeichert!)<br/>

      <form class="text" action="?s=gb/gb" method="post">
         Dein Name:<br/>
         <input class="text" name="name" type="text" size="30" maxlength="30"><br/>

         Dein Eintrag:<br/>
         <textarea class="text" name="eintrag" cols="50" rows="8"></textarea><br/><br/>

         <img src="inc/gb/captcha/captcha.php" border="0" title="Sicherheitscode"><br/>
         <input type="text" name="sicherheitscode" size="4"><br/><br/>

         <input type="submit" value="Absenden " class="button">
            <input type="reset" value="Abbrechen" class="button">

      </form>
      </p>
      </td>
   </tr>


   </table>


Code: Alles auswählen
gb.php
<?php

require("sql.php");

$name = $_POST['name'];
$datum = date("Y.m.d");
$zeit = date("H:i:s");
$eintrag = nl2br(htmlentities($_POST['eintrag']));
$ip = getenv("REMOTE_ADDR");


if ($_POST['sicherheitscode']==$sicherheits_eingabe)

{
if(empty($name) || empty($eintrag))
   {
      echo "<br><br><br><table align=center class=text><tr><td><b>! Hinweis : bitte alle Felder ausfüllen !</b><br>";

      echo "<a href=javascript:history.back()>Zurück</a></div></td></tr></table>";
   }
   else
   {

   $abfrage = "INSERT INTO $table (name,datum,zeit,eintrag, ip) VALUES ('$name','$datum','$zeit','$eintrag', '$ip')" ;

   $sql = mysql_query($abfrage,$verbindung) or die (mysql_error());

   echo "<br><br><br><table align=center class=text><tr><td>Eintrag Erfolgreich. IP wurde gespeichert<br><br><a href =?s=gb/gbook>Eintrag ansehen</a></td></tr></table>";
     }

mysql_close($verbindung);

}
else echo "Bitte Sicherheitseingabe wiederholen";

?>
kuenca
 
Beiträge: 4
Registriert: 13.04.2007, 11:31

Beitragvon apophis171 » 13.04.2007, 13:36

ich hatte das am anfang auch so. dann habe ich aber die beiden scripte (bei dir in der index php) zu einem zusammen gefasst, also so:

<?php session_start(); ?>
dann das html und so
<? das captcha script + dein script (vergess das captcha nicht mit einem "}" ganz zum schluss zu schließen, so wie ich :oops: )
?>
dann dein rest html

bei mir hatte es danach funktioniert
apophis171
 
Beiträge: 16
Registriert: 03.04.2007, 00:08
Wohnort: Rathenow

Beitragvon frameguard » 13.04.2007, 14:07

@apophis: Das Captcha ist bei kuenca geschlossen:

if(isset($_SESSION['captcha_spam']) AND $sicherheits_eingabe == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);}

allerdings fehlt - und das ist der einzige Fehler, den ich jetzt gefunden habe, ein ELSE - so wird der Gästebuch-Script auch bei falschem Sicherheitscode komplett abgearbeitet.

Vorschlag @kuenca:

nach der obigen Zeile ein
ELSE
{
die ("Falscher Sicherheitscode");
}

Die Funktion die(); bricht den Script mit einer Fehlermeldung (in dem Fall "Falscher Sicherheitscode" ab und verhindert, daß der Eintrag trotz falschem Sicherheitscode ins GB eingefügt wird.
frameguard
 
Beiträge: 120
Registriert: 05.03.2007, 19:19
Wohnort: Wien


Zurück zu Zahlen Captcha

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron