Online Highscore Module

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Farbfinsternis

Betreff: Online Highscore Module

BeitragMi, Sep 05, 2007 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Dieses Modul gestattet die einfache Implementation einer Online-Highscore in bestehende Projekte.

Das Archiv mit vorkompilierter Windows- und Linux-Version kann unter folgendem Link heruntergeladen werden.

>> Highscore.mod V0.3 << (ca. 46kb)

    In dem Archiv befinden sich folgende Dateien:
  • highscore.bmx => das Include mit den Funktionen
  • highscore_beispiel.bmx => Kurzes Beispielprogramm wie die Sache anzuwenden ist
  • highscore.php => das PHP-Script welches mit der Datenbank kommuniziert
  • mysql.php => stellt die Verbindung zur Datenbank her. Dieses Script muss mit Deinem Datenbankzugang angepasst werden!
  • rz_scores.sql.gz => Dump der MySQL Datenbank (kann mit phpMyAdmin in eine andere MySQL (5) Datenbank importiert werden)
  • Debug- und Release-Versionen des Moduls als Kompilat für Linux und Windows


In der Datei highscore_beispiel.bmx habe ich ein paar Zugriffe dokumentiert, falls Fragen auftreten helfe ich gern.

    Änderungen in V0.3
  • Das neue Modul PostData.mod wird nun für die Datenübertragung verwendet. Dieses Modul muss also installiert sein und kann hier heruntergeladen werden.
  • PostData.mod widerum verwendet Vertex' BNetEx zur Auflösung von IP's. Dieses Modul ist in diesem Subforum im entsprechenden Thread verfügbar.
  • der Parameter "use_http_post" existiert nicht mehr. Es werden generell alle Daten per HTTP Post übertragen. Ein Versuch die Highscore mit einem Browser zu manipulieren ist also absolut sinnfrei.
  • Zuletzt bearbeitet von Farbfinsternis am Di, Sep 18, 2007 16:52, insgesamt einmal bearbeitet

Farbfinsternis

BeitragDo, Sep 06, 2007 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Update 0.20

SetScore() und RemoveScore() können Ihre Daten nun per POST anstatt wie bisher per REQUEST senden. Dies verhindert dass Daten per gefälschter URL eingetragen werden können.

Der Aufruf der Funktion InitHighscore() hat sich geändert:
Code: [AUSKLAPPEN]

Rem
    current_version:String = Version des Spiels
    url:String = Host des PHP Scripts (Default = colorflow.de)
    php_script:String = Pfad zum PHP Script (Default = /pub/highscore/highscore.php)
    port:Int = HTTP Port (Default = 80)
    use_http_post:Byte = Flag zum aktivieren der POST-Geschichte (Default = True)
EndRem
InitHighScore(current_version:String, url:String, php_script:String, port:Int, use_http_post:Byte)

Durch das umstellen auf POST hat sich auch das PHP Script geändert, muss also überschrieben werden.

Download Source / Linux Modul / Win32 Modul (ca. 60kb)
Farbfinsternis.tv

D2006

Administrator

BeitragDo, Sep 06, 2007 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
~Verschoben~
Auf Wunsch von Farbfinsternis.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Farbfinsternis

BeitragDo, Sep 06, 2007 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke D2006.

Obiges Update beinhaltet die highscore.php welche zwar per POST steuerbar ist, aber auch immer noch per REQUEST. Hier die aktualisierte Version die kein Request mehr akzeptiert.
Code: [AUSKLAPPEN]

<?php
   /*
      =============================================================
      Highscores mit BMax austauschen
      =============================================================
   */
   extract($_REQUEST);
   extract($_POST);
   extract($_REQUEST);
   extract($_SERVER);
   
   include "mysql.php";
   
   define("ACTION_GETSCORE"      ,  1);
   define("ACTION_SETSCORE"      ,  2);
   define("ACTION_KILLSCORE"      ,  3);
   define("ACTION_RESETTABLE"      ,  4);
   define("ACTION_COUNTSCORES"      ,  5);
   
   $ip      = getenv("REMOTE_ADDR");
   $datum   = date("Y-m-d H:i:s");
   
   $action      = $_POST["action"];
   $v         = $_POST["v"];
   $user      = $_POST["user"];
   $score      = $_POST["score"];
   $sc         = $_POST["sc"];

   
   switch($action)
   {
      /*
         ---------------------------------------------------------
         Highscore ausgeben
         ---------------------------------------------------------
      */
      case ACTION_GETSCORE :
         $query   = "SELECT
                  id,
                  datum,                  
                  user,
                  score,
                  version
                  FROM ".$tblp."scores
                  WHERE version='$v'
                  ORDER BY score DESC";
         
         if($l > 0) $query.= " LIMIT $f, $l";
         
         $result   = MYSQL_QUERY($query);
         while($row = MYSQL_FETCH_OBJECT($result))
         {
            echo $row->id."\n";
            echo $row->user."\n";
            echo $row->score."\n";
            echo $row->datum."\n";
         }
         
         break;
      
      
      
      /*
         ---------------------------------------------------------
         Neuen Score eintragen
         ---------------------------------------------------------
      */
      case ACTION_SETSCORE :
         $query   = "INSERT INTO ".$tblp."scores (
                  datum,
                  user,
                  ip,
                  score,
                  version
                  ) VALUES (
                  '$datum',
                  '$user',
                  '$ip',
                  '$score',
                  '$v')";
         $result   = MYSQL_QUERY($query);
         if($result){ echo "success\n"; }else{ echo "failed\n"; }
         
         break;
      
      
      
      /*
         ---------------------------------------------------------
         Score löschen
         ---------------------------------------------------------
      */
      case ACTION_KILLSCORE :
         $query   = "DELETE FROM ".$tblp."scores WHERE id=$sc";
         $result = MYSQL_QUERY($query);
         if($result){ echo "success\n"; }else{ echo "failed\n"; }
         
         break;
         
         
         
      /*
         ---------------------------------------------------------
         Tabelle zurücksetzen
         ---------------------------------------------------------
      */
      case ACTION_RESETTABLE :
         $query   = "TRUNCATE TABLE `".$tblp."scores`";
         $result = MYSQL_QUERY($query);
         if($result){ echo "success\n"; }else{ echo "failed\n"; }
         
         break;
         
      
      /*
         ---------------------------------------------------------
         Anzahl der Scores zurückgeben
         ---------------------------------------------------------
      */
      case ACTION_COUNTSCORES :
         $query   = "SELECT id FROM ".$tblp."scores WHERE version=$v";
         $result   = MYSQL_QUERY($query);
         
         echo MYSQL_NUM_ROWS($result);
         
         break;
   }
?>
Farbfinsternis.tv
 

Dreamora

BeitragDo, Sep 06, 2007 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön Smile
Allerdings habe ich darin vergeblich nach einem Modul gesucht.

Wird das noch in der nächsten Version angepasst?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Farbfinsternis

BeitragDo, Sep 06, 2007 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Öhm? Das Archiv beinhaltet den Sourcecode sowie die kompilierten Module für Windows und Linux. Der Scope lautet /makegame/highscore. Zu importieren über makegame.highscore

Das erste Posting beinhaltet noch die Include-Version. Diese pflege ich aber nicht mehr, weshalb ich D2006 bat den Thread zu verschieben.

Ich habe das Archiv aktualisiert und es kann widerum unter http://www.colorflow.de/pub/hi...d.0.20.zip inkl. Source für Linux und Windows heruntergeladen werden.
Das Archiv beinhaltet:

  • kompiliertes Modul für Linux
  • kompiliertes Modul für Windows
  • Quelltext
  • PHP-Script "highscore.php"
  • PHP-Script "mysql.php" (muss für den eigenen MySQL Server angepasst werden
  • Dump der Datenbank (MySQL5, erzeugt eine Tabelle namens rz_scores)
Farbfinsternis.tv
 

Dreamora

BeitragDo, Sep 06, 2007 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, mein Fehler.
Weil der obere Link im ersten Post die Module nicht enthält. Sorry.


Auf jeden Fall sehr schön Smile
Sollte nicht wenige der grundlegenden Probleme "lösen" dank des kompletten Umfanges dessen was dafür benötigt wird.

Danke
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Farbfinsternis

BeitragDi, Sep 18, 2007 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Die neue Version 0.3 ist verfügbar, alle Informationen und Download-Links befinden sich im ersten (edititierten) Post.
Farbfinsternis.tv
 

m a j o r

BeitragDi, Dez 25, 2007 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm naja ich würde blitzmax noch einige checksums senden lassen... habe auch schon mal eine online-highscore erstellt. ist halt bissle sicherer..

kann sein dass ich mich jetzt irre aber was wäre wenn ein user im programm folgenden namen eintippt:
x','127.0.0.1','99','7');DROP TABLE 'rz_';--

wäre sinnvoll vllt im php script alle ' und(?) \ zu blockieren... (das natürlich auch schon client-seitig)

Farbfinsternis

BeitragDi, Dez 25, 2007 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
m a j o r hat Folgendes geschrieben:
hmm naja ich würde blitzmax noch einige checksums senden lassen... habe auch schon mal eine online-highscore erstellt. ist halt bissle sicherer..

kann sein dass ich mich jetzt irre aber was wäre wenn ein user im programm folgenden namen eintippt:
x','127.0.0.1','99','7');DROP TABLE 'rz_';--

wäre sinnvoll vllt im php script alle ' und(?) \ zu blockieren... (das natürlich auch schon client-seitig)


Sicher gibt es noch einiges an der Sicherheit zu feilen, Dein Beispiel mit dem Namen hätte aber keinerei Auswirkung.
Farbfinsternis.tv
 

m a j o r

BeitragMi, Dez 26, 2007 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm aso das hab ich grad nur schnell zusammen getippt ohne viel auf den blitzmax code ablauf zu achten.. aber wenn ich beispielsweise die eintrag-funktion mit diesem code aufrufen würde würde sich aus dem query

$query = "INSERT INTO ".$tblp."scores (
datum, user,ip,score,version ) VALUES ( '$datum', '$user', '$ip', '$score', '$v')";

$query = "INSERT INTO ".$tblp."scores (
datum, user,ip,score,version ) VALUES ( '$datum', 'x','127.0.0.1','99','7');DROP TABLE 'rz_';-- , '$ip', '$score', '$v')";

ergeben!? was table rz__ wegwerfen würde.
oder hab ich jetzt hier nen denkfehler?
 

#Reaper

Newsposter

BeitragMi, Dez 26, 2007 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
*majorrechtgeb*

*hust* http://de.wikipedia.org/wiki/SQL-Injektion *hust*
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group