[Brauche Hilfe]Sicherheitslücke fixen

Black-Rider

New Member
Hallo,
ich habe ein kleines Minigame geproggt. Jedoch habe ich nun ein Problem. Es gibt noch eine Sicherheitslücke! Hier erstmal mein Script:
PHP:
<?php
function myconnect()
{
$dbhost = "localhost";
$dbpass = "*******";
$dbuser = "*****";
$dbname = "usr_web27_*";
mysql_connect($dbhost,$dbuser,$dbpass)or die(mysql_error());
mysql_select_db($dbname);
}
myconnect();
if (isset($_POST['word'])) {$word = $_POST['word'];}
else
 {
 $r = mysql_fetch_assoc(mysql_query("SELECT COUNT(word) FROM galgen"));
 $rand = rand(1,$r['COUNT(word)']);
 $query = mysql_query("SELECT word FROM galgen WHERE id='".$rand."'");
 $wort = mysql_fetch_assoc($query);
 $word = strtoupper($wort['word']);
 }

if (isset($_POST['letter'])) {$letter = strtoupper($_POST['letter']);}
else {$letter = '0';}



if (isset($_POST['tryouts'])) {$tryouts = $_POST['tryouts'];}
else {$tryouts = 6;}

if ($tryouts == 0)
 {

 die('Schade du konntest das Wort nich auflösen. Es lautete '.$word.'!'); exit();
 }

if (isset($_POST['found'])) {$found = $_POST['found']; $found1 = explode(' ', $found);}


$letters = strlen($word);
$pos = 0;
while($pos != $letters)
 {
 if ($word[$pos] == '-')
  {
  $search[$pos] = '-';
  }
 elseif ($word[$pos] == ' ')
  {
  $search[$pos] = ' ';
  }
 elseif ($word[$pos] == ',')
  {
  $search[$pos] = ',';
  }
 elseif ($word[$pos] == '.')
  {
  $search[$pos] = '.';
  }
 elseif ($word[$pos] == $letter)
  {
  $search[$pos] = ''.$letter.'';
  $suc = 1;
  }
 else
  {
  $search[$pos] = '_';
  }
 $pos++;
 }
$pos1 = 0;

while($pos1 != $pos)
 {
 $foundedletters = count($found1);
 while($foundedletters != 0)
  {
  $foundcheck = $foundedletters-1;
  if ($word[$pos1] == $found1[$foundcheck])
   {
   $search[$pos1] = $found1[$foundcheck]; break;
   }
  $foundedletters--;
  }
 $pos1++;
 }
$pos2 = 0;
$searched = '';
$searched1 = '';
foreach ($search AS $key=>$value)
 {
 $searched1.= $value;
 }
while($pos2 != $pos1)
 {
 $searched.= ''.$search[$pos2].'<span style="font-size: 40%;">&nbsp;</span>';
 $pos2++;
 }
 

if ($searched1 == $word)
 {
 echo $searched;
 echo '<p>
<form action="galgen.php" method="post">
Nun gebe das Wort bitte zur Bestätigung ein? ("-", ",", "." und Leerzeichen sind mitzuschreiben)<p>
<input name="solution" size=25> <input type="submit" value="Lösen">
<input type="hidden" name="found" value="'.$found.'">
<input type="hidden" name="word" value="'.$word.'">
<input type="hidden" name="tryouts" value="'.$tryouts.'">
<input type="hidden" name="credits" value="'.$credits.'">
</form>';
 }

else
{
echo $searched; echo '<p>';
if (isset($found) && $suc == 1){$found.= ' '.$letter.'';}
elseif (!isset($found) && $suc == 1) {$found = $letter;}

if (isset($_POST['solution']))
 {
 $solution = $_POST['solution'];
 if (strtoupper($solution) == $word)
  {
  
  echo '<h3>Hinweis</h3><p>Super du hast das Wort herausgefunden!'; exit();
  }
 else
  {
  echo '<h3>Hinweis</h3><p>Das war leider nicht richtig! Versuche noch mehr Buchstaben herauszufinden!</p>';
  }
 }

if ($suc == 0)
 {
 $tryouts--;
 if ($tryouts == 0)
  {
 
  echo '<h3>Hinweis</h3><p>Schade du konntest das Wort nich auflösen. Es lautete '.$word.'!'; exit();
  }
 }

echo '<form action="galgen.php" method="post">
Ist ein <input name="letter" size=1> enthalten <input type="submit" value="?">
<input type="hidden" name="found" value="'.$found.'">
<input type="hidden" name="word" value="'.$word.'">
<input type="hidden" name="credits" value="'.$credits.'">
<input type="hidden" name="tryouts" value="'.$tryouts.'">';
echo '</form><p>oder
<form action="galgen.php" method="post">
Möchtest du auflösen? ("-", ",", "." und Leerzeichen sind mitzuschreiben)<p>
<input name="solution" size=25> <input type="submit" value="Lösen">
<input type="hidden" name="found" value="'.$found.'">
<input type="hidden" name="word" value="'.$word.'">
<input type="hidden" name="tryouts" value="'.$tryouts.'">
<input type="hidden" name="credits" value="'.$credits.'">
</form><p>Du hast noch '.$tryouts.' Versuche übrig!';}

?>
Wer es testen möchte kann dies hier tun:
http://hack-esports.de/galgen.php
Nun mein Problem. Wenn man ein Wort eingegeben hat und und dann einfach auf zurück klickt hat man wieder 6 Versuche! Also so kann man Theoretisch jedes Wort lösen. Aber ich möchte nicht, wenn man zurück geht, kann man wieder 6 Versuche hat.
Kann jemand das Script mal so verändern, dass das net mehr geht?
Muss gestehen habe über 1 Jahr kein php mehr genutzt^^
Hoffe ihr könnt mir helfen.
MFG
Black-Rider
Edit: Sobald das Script komplett fertig ist wird es zum kostenlosen download gestellt inklusive Adminbereich! Aber vorher darf es nirgentwo veröffentlicht werden!
 
Du brauchst erst mal eine Startbedingung. (z.B. ein Button, womit man das Spiel startet). Start in Session vermerken.
Wieviele Versuche erlaubt sind, speicherst du dann in einer Session (oder Cookie) ab.
Ab da wird je Versuch nur noch runtergezaehlt ($_SESSION['versuche']--; ) bis Null erreicht ist. Dann ist das Spiel aus und es kann erst wieder mit druecken des Startknopfes gestartet werden($_SESSION['versuche']=5; ) .

PS: Das ist keine Sicherheitsluecke.. man denkt ja sonstwas, wenn man den Titel liest.
 
Auf den ersten Blick sind mir noch andere Probleme aufgefallen:

- Das Lösungswort steht in einem Hidden-Field und ist somit über die Funktion "Quelltext anzeigen" im Browser zu sehen.
- Wenn man einen Buchstaben richtig rät und weiter macht, verschwindet der vorherige wieder.
- Bei mir wurde auch die richtige Lösung nicht erkannt.

Alle Probleme liessen sich mit Sessions lösen. Dann würde der "Zurück"-Trick nicht mehr funktionieren, die Seite könnte sich die schon erratenen Buchstaben merken und das Lösungswort müsste nicht mehr im Quelltext stehen.
 
Uff, ehm kann mir das evt. mal einer direkt machen? Weil ich muss das bis heute Abend fertig haben und muss in 20 Min weg! Also Gegenleistung biete ich einen Webspace oder TS² Server oder Bouncer!
Würde mich sehr freuen!
MFG
Black-Rider
 
Man muesste das ganze Skript neu machen (sind doch einige Fehler drin). Und da (wenigestens) 90%der aktiven Mitglieder einen eigenen Server haben, ist dein Angebot nicht gerade sehr verlockend ;)

Nimm Papier und Stift mit, dann kannst du auch unterwegs an dem Skript weitertuefteln.
 
Back
Top