Session einbetten

nordi

Erfahrenes Mitglied
Hallo, ich hab ein kleines Spiel programmiert wo man sich in eine Highsoreliste eingetragen kann. Problem ist aber, dass ein Kumpel von mir sich irgendwie das Spiel (Javascript&HTML) runterlädt, den Highscore einträgt dann auf den "Eintragen"-Button klickt und schon ist der Highscore "geknackt".

Wollte das mit Session umgehen? Geht das? Würde dann in die 2 Seiten (Spielseite & Highscore Eintragen) sowas einbauen. Kann man dann trotzdem, wenn man sich die Seite runterlädt den Highscore so eintragen? Oder schützt die SessionFunktion sowas? Wie würdet ihr das machen?
 
Wenn du das ganze mit PHP und SESSIONS lösen willst, dann würde dass ganze von deinem Freund auf jedenfall nicht mehr Funktionieren.

Ich würde dann eben bei deinem Spiel immer Testen ob die SESSION vorhanden ist
PHP:
<?php
if(isset($_SESSION['game'])){
?>
// hier kommt dann dein HTML Code
<?php
}
else
{
echo "das direkte aufrufen der Seite ist nicht gestattet!";
}
?>

Das ganze dann am besten noch inlcude und davor der session_start(); setzten und es sollte auf jedenfall gehen. Der Code müsste halt immer von PHP geschützt sein ohne dass man diese Seite direkt aufrufen kann.

Am besten dann noch einen bestimmten Schlüssel in der SESSION und der Seite speichern den du dann auch noch prüfst und wolla.
 
Den Code, den du mir genannt hast setz ich dann einfach in die beiden Seiten rein, oder wie meinst du das? Was meinst du mit "am besten noch inlcude und davor der session_start();" ?
 
Hi, ok danke! Hab mir mal den ganzen Artikel durchgelesen und auch so einigermaßen verstanden, glaub ich. Aber ich weiß nicht, wie ich das in die Seite einbauen soll? Also die Seite, wo man den Highscore einträgt, schreibt die Daten mit dem Highscore&Namen in die Datenbank. Die kann man anscheinend "manipulieren", indem man sie runterlädt und etwas verändert. Ich hab euch jetzt einfach mal den kompletten Code hier reingepostet, damit ihr wisst, wie das ungefähr funktioniert - ist super simpel geschrieben.

HTML:
<?php ob_start(); ?>
<?php include("config.inc.php"); ?>
<html>
<head>
<title>stokesdesign.de - tetris revival</title>
<style type="text/css">
<!--
td {  	font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: #000000}
body {
	background-attachment: fixed;
	background-image: url(../img/splash/1.gif);
	background-repeat: no-repeat;
	background-position: left top;
	font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif;
	font-size: 11px;
}
A:link {  	font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
A:hover {
		font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif;
	font-size: 11px;
	color: #000000;
	text-decoration: none;
	font-weight: bold;
}
A:visited {  	font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
.Stil1 {color: #000000}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0">
<div align="center">
  <table width="400"  border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td width="10" bgcolor="#FFFFFF" class="Stil1">&nbsp;</td>
      <td width="390" bgcolor="#FFFFFF" class="Stil1"><b>eintrag in die datenbank - highscore</b></td>
    </tr>
  </table>
  <br>
  <form name="senden" method="post" action="dbentry.php">
    <table width="40%" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td width="2%">&nbsp;</td> 
        <td width="27%">Name : </td>
        <td width="71%"> 
          <input type="text" name="player" maxlength="100">
        </td>
      </tr>
      <tr>
        <td width="2%">&nbsp;</td> 
        <td width="27%">Punktzahl :</td>
        <td width="71%"> 
          <?php 
		  $verbindung = @mysql_connect("$dbhost","$dbuser","$dbpass");

 if (!$verbindung) {
 		echo "Keine Verbindung möglich!\n";
 		exit;
 	}


$abfrage = "SELECT * FROM $sqltable2 ORDER BY id DESC";
$ergebnis = mysql_db_query($dbtable,$abfrage,$verbindung);
while (list($id,$punktzahl) = mysql_fetch_row($ergebnis)) 
{
if($punktzahl == 0 OR $punktzahl == ""){ Header("Location: loser.php");
exit(); } else {
echo "$punktzahl";
}}
	    
?>
        </td>
      </tr>
      <tr>
        <td width="2%">&nbsp;</td> 
        <td width="27%">&nbsp;</td>
        <td width="71%">&nbsp;</td>
      </tr>
      <tr>
        <td width="2%">&nbsp;</td>
        <td width="27%">&nbsp;</td>
        <td width="71%">
          <input type="submit" name="senden" value="ok!">
        </td>
      </tr>
    </table>
  </form> 
</div>
<?php 
if($senden){
if ($player == "") {

echo "<center>Du hast keinen Namen angegeben!</center>";
exit(); }

else
{ 
$verbindung = @mysql_connect("$dbhost","$dbuser","$dbpass");

 if (!$verbindung) {
 		echo "Keine Verbindung möglich!\n";
 		exit;
 	}


$abfrage = "SELECT * FROM $sqltable2 ORDER BY id DESC";
$ergebnis = mysql_db_query($dbtable,$abfrage,$verbindung);
while (list($id,$punktzahl) = mysql_fetch_row($ergebnis)) 
{
	    
$verbindung = @mysql_connect("$dbhost","$dbuser","$dbpass");

if (!$verbindung) {
		echo "Verbindung zur Datenbank ist nicht möglich!\n";
		exit;
	}

mysql_select_db($dbtable,$verbindung);
	
$daten = "INSERT INTO $sqltable (name,highscore) VALUES ('$player','$punktzahl')";

$result = mysql_query($daten,$verbindung);

Header("Location: highscore.php");
exit(); 
}}
} ?>
<?php mysql_close($verbindung); ?>
</body>
</html>
<?php ob_end_flush(); ?>

Wie würdet ihr da nun die Session-Funktion einbauen, damit das nicht mehr funktioniert? Oder gibt es noch eine andere Option?
 
Ich geh mal davon aus, dass du zuerst eine Seite hast auf der das Game läuft. Also nehmen wir mal an das ist die Spiel.php und dann verlinkst du eben auf die Eintrag.php oder so in der Art. Dann würde ich das ganze wie folgt aufbauen.

Spiel.php
PHP:
<?php
session_start();
$_SESSION['permit'] = "AFDASSW12345";
//Danach eben dein Game ^^
?>

Eintrag.php
PHP:
<?php
session_start();
//ist SESSION vorhanden und ist Inhalt == deinem Inhalt ...
//könnte ja die SESSION auch selbst erstellen ^^
if(isset($_SESSION['permit']) AND ($_SESSION['permit'] == "AFDASSW12345")){
//dann kommt halt dein Inhalt ...


ob_start();
include("config.inc.php");
?>

<html>
<head>
<title>stokesdesign.de - tetris revival</title>
<style type="text/css">
<!--
td {  	font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: #000000}
body {
	background-attachment: fixed;
	background-image: url(../img/splash/1.gif);
	background-repeat: no-repeat;
	background-position: left top;
	font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif;
	font-size: 11px;
}
A:link {  	font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
A:hover {
		font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif;
	font-size: 11px;
	color: #000000;
	text-decoration: none;
	font-weight: bold;
}
A:visited {  	font-family: "Trebuchet MS", Geneva, Arial, Helvetica, sans-serif; font-size: 11px; color: #000000; text-decoration: none}
.Stil1 {color: #000000}
-->
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0">
<div align="center">
  <table width="400"  border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td width="10" bgcolor="#FFFFFF" class="Stil1">&nbsp;</td>
      <td width="390" bgcolor="#FFFFFF" class="Stil1"><b>eintrag in die datenbank - highscore</b></td>
    </tr>
  </table>
  <br>
  <form name="senden" method="post" action="dbentry.php">
    <table width="40%" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td width="2%">&nbsp;</td> 
        <td width="27%">Name : </td>
        <td width="71%"> 
          <input type="text" name="player" maxlength="100">
        </td>
      </tr>
      <tr>
        <td width="2%">&nbsp;</td> 
        <td width="27%">Punktzahl :</td>
        <td width="71%"> 
          <?php 
		  $verbindung = @mysql_connect("$dbhost","$dbuser","$dbpass");

 if (!$verbindung) {
 		echo "Keine Verbindung möglich!\n";
 		exit;
 	}


$abfrage = "SELECT * FROM $sqltable2 ORDER BY id DESC";
$ergebnis = mysql_db_query($dbtable,$abfrage,$verbindung);
while (list($id,$punktzahl) = mysql_fetch_row($ergebnis)) 
{
if($punktzahl == 0 OR $punktzahl == ""){ Header("Location: loser.php");
exit(); } else {
echo "$punktzahl";
}}
	    
?>
        </td>
      </tr>
      <tr>
        <td width="2%">&nbsp;</td> 
        <td width="27%">&nbsp;</td>
        <td width="71%">&nbsp;</td>
      </tr>
      <tr>
        <td width="2%">&nbsp;</td>
        <td width="27%">&nbsp;</td>
        <td width="71%">
          <input type="submit" name="senden" value="ok!">
        </td>
      </tr>
    </table>
  </form> 
</div>
<?php 
if($senden){
if ($player == "") {

echo "<center>Du hast keinen Namen angegeben!</center>";
exit(); }

else
{ 
$verbindung = @mysql_connect("$dbhost","$dbuser","$dbpass");

 if (!$verbindung) {
 		echo "Keine Verbindung möglich!\n";
 		exit;
 	}


$abfrage = "SELECT * FROM $sqltable2 ORDER BY id DESC";
$ergebnis = mysql_db_query($dbtable,$abfrage,$verbindung);
while (list($id,$punktzahl) = mysql_fetch_row($ergebnis)) 
{
	    
$verbindung = @mysql_connect("$dbhost","$dbuser","$dbpass");

if (!$verbindung) {
		echo "Verbindung zur Datenbank ist nicht möglich!\n";
		exit;
	}

mysql_select_db($dbtable,$verbindung);
	
$daten = "INSERT INTO $sqltable (name,highscore) VALUES ('$player','$punktzahl')";

$result = mysql_query($daten,$verbindung);

Header("Location: highscore.php");
exit(); 
}}
} ?>
<?php mysql_close($verbindung); ?>
</body>
</html>
<?php ob_end_flush(); 


//Wenn SESSION nicht vorhanden ist ...
}
else
{
echo "Es ist Ihnen nicht gestattet diese Seite direkt aufzurufen!";
//SESSION zerstören ...
unset($_SESSION['permit']);
}
?>

So in etwa würd ich das dann wohl lösen.
 
Hey, danke! Problem ist aber, dass der Gamecode über 900 Zeilen lang ist und übersäht ist von Kommata :) Das wird ne Menge Arbeit, dass in PHP-Stil umzuwandeln... das muss ich doch, oder nicht? Wenn ja, gibts noch ne Andere Methode? Kann ich nicht einfach den Code
PHP:
<?php
session_start();
$_SESSION['permit'] = "AFDASSW12345";
//OHNE GAMECODE
?>

Ohne den Gamecode geht das nicht, oder? ;)
 
Ich hab mir nochmal Gedanken darüber gemacht! Was vllt. eine einfachere Möglichkeit wäre.. Ich arbeite mit 2 Mysqltabellen. Zuerst wird der Highscore von der Spielseite in die eine Tabelle eingespeichert und dazu noch ein Wort, was als Key genutzt wird. Wenn er nun nur die dbentry-Seite aufruft, fragt das Script einfach ab, ob das Wort auch in der Tabelle existiert... wenn ja -> Eintrag darf erfolgen, wenn nicht -> verloren..

Was haltet ihr davon?
 
Zurück