Online Highscores verwalten

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
joggel

Online Highscores verwalten

Beitrag von joggel »

Hallo,

also, ich habe von Web/DB-Programmierung kaum eine Ahnung, also entschuldigt wenn ich evtl. eine falsche Vorstellung habe.
Ich möchte zu einem Spiel Highscores verwalten. Diese sollen sich online auf einem Server befinden.
Diese Highscores an sich kann ich ja mittels einer DB verwalten (SQL).
In dem Spiel selber werden eben zum Schluss, oder wenn gewünscht, die Highscores angezeigt bzw. die Punkte an die DB gesendet.
Ich habe schon etwas rumgegoogelt, und das gefunden was man seitens der Anwendung benutzen könnte.

Zu meiner Frage:
Hat damit schon jemand Erfahrung?
Kann mir jemand Tipps geben?
Gibt es evtl. schon ein gutes Framework für so Etwas?
Wie sieht es mit Sicherheit bei soetwas aus?

Gruß
Tejio
Establishment
Beiträge: 107
Registriert: 11.11.2010, 11:33

Re: Online Highscores verwalten

Beitrag von Tejio »

Hi Joggel,

soweit ich es verstanden habe, möchtest du mit einer Datenbank arbeiten. Dafür würde ich eher OpenDBX empfehlen. curlpp nutzt man normalerweise zum Übertragen von Dateien über das Internet. Wenn du mit deinem Spiel eine Webseite mit deinem Highscore runterladen möchtest, dann würde es sich für dich empfehlen. Sonst würde ich eher zu OpenDBX raten.

Bezüglich Sicherheit: Einen kleinen Überblick bietet der Wikipedia-Eintrag für SQL-Injections.

€dit: OpenDBX hat seinen letzten Update am 19.04.2010 erhalten. Ich weiß nicht, inwiefern für dich die Aktualität von Bedeutung ist. Nur so als kleiner Hinweis.

Gruß, Tejio
joggel

Re: Online Highscores verwalten

Beitrag von joggel »

HI Tejio,

also diese Daten sollen über das Internet abgerufen werden.
Deswegen "curlpp".

Mit Sicherheit meinte ich, Cheaten.

Gruß
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Online Highscores verwalten

Beitrag von Artificial Mind »

Hi joggel,

das Cheaten könnte dir tatsächlich Kopfzerbrechen bereiten, da es viele Angriffsmöglichkeiten gibt.

1. Die Datenbank/Webinterface
Solange du keine offensichtlichen SQL-Injections erlaubt (also schön alle Parameter vom SQL-Query richtig encodest) sollte dies einigermaßen sicher sein.

2. Die Übertragung
Angenommen,die Datenbank ist sicher (nicht kompromittiert). Stell dir die Frage, ob jemand unabhängig von deinem Client einen Highscore einsenden könnte mit einem beliebigen Wert.
ganz harte Sicherheit:
Wenn dieser Angreifer also dein Protokoll und Client kennt, könnte er eine beliebige Highscore einsenden (ohne zu spielen)?
weiche Sicherheit:
Wenn dieser Angreifer den Datenverkehr zwischen deinem Server und Client mitliest (aber die interne Architektur nicht kennt, also z. B. nur den Client _benutzt_ hat), ist es wahrscheinlich, dass er daraus erraten kann, wie man eine beliebige Highscore einsendet?

Ich denke man filtert über 99% aller "Gelegenheits-Cheater" raus, wenn man beidseitig die Übetragung verschlüsselt. (Wenn der Name tatsächlich ein eindeutiger Benutzername ist und kein willkürlicher Name den man bei jedem neuen Rekord angeben kann, sollte der Name Teil des Schlüssels sein, bzw. der Server speichert pro Benutzer einen Teil des Schlüssels)

3. Der Client
Besonders Clients in managed Sprachen (Java, C#) haben die unangenehme Eigenschaft, sich sehr einfach dekompilieren zu lassen - in lesbaren Sourcecode (java decompiler, .NET reflector). Selbst mit Obfuscation Tools kann man verhältnismäßig leicht rausfinden, wie das Programm funktioniert. Selbst bei unmanaged Sprachen, die direkt in Maschinencode compilieren, kann man viel einfach rausfinden, wenn man nicht aufpasst. Dazu gehören sämtliche Strings, Bibliotheksaufrufe und auch ein Memory Editor tut seinen Dienst meisten gut, wenn man künstlich die Punkte hochsetzen will. (Mit soetwas wie CheatEngine kann auch ein durchschnittlicher Gamer in Minutenschnelle seinen Punktestand auf 2^31 - 1 setzen)

Hier ist es leider auch nicht so einfach, einen einigermaßen akzeptablen Sicherheitsstand zu bekommen. Falls deine Sprache managed ist, solltest du auf jeden Fall vor Auslieferung ein Obfuscation Tool drüberlaufen lassen. Aber egal, welche Sprache es ist, sollte der Punktestand nicht einfach in einer Variablen direkt gespeichert werden, weil dies wirklich auch Amateur-Cheater super schnell geknackt kriegen.

4. Die Gamemechanik
Als Spieleprogrammierer hast du hier natürlich die Aufgabe, die Spielmechanik so zu designen, dass man nicht durch Bug-Using oder Game-Mechanic-Abuse Punkte "farmen" kann.

Fazit: eine Cheater-sichere Highscore ist sehr schwierig, dein Ziel sollte es wahrscheinlich sein, den Großteil der Amateur-Cheater auszufiltern.

Grüße,
Mind
joggel

Re: Online Highscores verwalten

Beitrag von joggel »

Ok, vielen dank.
Werd mir da mal anhand dieser Infos was überlegen...
4. Die Gamemechanik
Als Spieleprogrammierer hast du hier natürlich die Aufgabe, die Spielmechanik so zu designen, dass man nicht durch Bug-Using oder Game-Mechanic-Abuse Punkte "farmen" kann.
Ist zum Glück nicht meine Baustelle. Mach nur das HighscoreSystem.
Eisflamme
Establishment
Beiträge: 412
Registriert: 26.05.2002, 17:42
Wohnort: Köln

Re: Online Highscores verwalten

Beitrag von Eisflamme »

Hi,

also ich habe mir ein einfaches PHP-Skript geschrieben, das ich über meine Anwendung dann einfach mit entsprechenden Parametern aufrufe. Das ist sehr einfach umzusetzen und funktioniert gut.

Problematisch ist natürlich die Sicherheit. Man kann ein wenig verschlüsseln, aber wenn jemand mitschreibt, was über das Netzwerk läuft, hilft das auch wenig. Ich habe noch ein paar Parameter über das Spielergebnis mitgeliefert, die eine Plausibilitätsprüfung des Punktestandes ermöglichen. Evtl. lassen sich auch Punkte im Spielverlauf mitsenden, die Abhilfe schaffen. Aber letztlich kann man das alles mit mehr oder weniger Aufwand nachstellen. Gegen einfachste Attacken hilft vielleicht schon eine einfache Verschlüsselung und ein paar Parameter bzgl. Zeit oder so.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Online Highscores verwalten

Beitrag von Schrompf »

Ich häng mich hier mal kurz mit rein, da ich den Plan mit Joggel ausgeheckt habe.

Ziel:
Ein kleines Framework, um aus einem Spiel heraus Online Hiscores abzufragen und neue Einträge vorzunehmen. Wird dann wohl OpenSource werden, wenn's mal funktioniert.

Meine persönliche Vorstellung von der Funktionsweise:
Ein paar C++-Klassen, um Hiscore-Listen von einer im Spiel hinterlegten URL abzufragen und Einträge hinzuzufügen. Dazu auf Serverseite ein paar PHP-Skripte und eine MySQL-Datenbank, um die Listen-Abfragen zufrieden zu stellen und neue Einträge entgegenzunehmen.

Wunsch-Features, priorisiert nach Wichtigkeit:
- Basis-Funktionalität: Listen abfragen und Einträge holen
- Filtermöglichkeiten: z.B. Abfrage auf einen satz Namen von Freunden beschränken
- Admin-Skripte, um Listen online anzuzeigen, zu leeren oder zu editieren
- Cheat-Sicherheit über Verschlüsselung oder Signierung

Cheat-Sicherheit zuletzt, weil ich bei OpenSource-Projekten auch immer sehr auf die einfache Verwendbarkeit achte. Wenn man durch die Cheatsicherheit plötzlich eine SSL- und Crypto-Lib dazulinken muss, die opensource-typisch nur als Source mit irgendnem gurkigen Build-System eines veralteten Linux-Derivats verfügbar ist UND die auch noch selber drei Dependencies mitbringt, ist die ganze Lib plötzlich nutzlos geworden. Und direkte Nutzbarkeit ist immer besser als "ginge sicherlich, wenn man es zum Bauen bekäme".

Das Gesamtpaket sollte nach meiner Vorstellung dann so aussehen, dass man da ein paar C++-Klassen bekommt, die man einfach seinem Projekt hinzufügt, und ein paar PHP-Skripte, die man mit den Logik-Daten einer MySQL-Datenbank füttert. Dann legt man den PHP-Teil auf einem Server seiner Wahl ab und überreicht die URL im Sourcecode an die C++Klassen. Die Klassen bieten jeweils eine Arbeitsfunktion, die ein Timeout nehmen und nach Abschluss ein Signal verschicken, so dass man sie auch einfach in einem separaten Thread losschicken kann.

Stelle ich mir das zu einfach vor? Kann das so klappen? Hat das schonmal jemand gemacht und kann wertvolle Tipps geben, worauf zu achten ist?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4258
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Online Highscores verwalten

Beitrag von Chromanoid »

Macht das ganze vielleicht als Webservice. Ich bin mir ziemlich sicher, dass es da gerade im Flash-Bereich einiges gibt (z.B. bei Kongregate, ist aber an die Plattform gebunden). Der C++-Teil ist natürlich nur für C++-Entwickler sinnvoll. Eine sprachagnostische Spezifikation (für Server und Client) würde sicher sinnvoll sein. Für iOS und Android könnte man sich auch mal OpenFeint anschauen, ich kann mir gut vorstellen, dass dort auch Highscores "unter Freunden" möglich sind.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Online Highscores verwalten

Beitrag von Schrompf »

Ich brauche es aber explizit für C++ :-)
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4258
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Online Highscores verwalten

Beitrag von Chromanoid »

Naja nen Framework um Webservices in C++ abzufragen müsste es doch an jeder Ecke geben. Ich meinte mit den Beispielen auch eher Sachen, die man sich mal anschauen sollte, weil sie im großen Stil funktionieren.
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Online Highscores verwalten

Beitrag von TGGC »

Ich hab sowas relativ simpel hier eingebaut:
http://zfx.info/viewtopic.php?f=26&t=820&start=0

Vielleicht hilfts als Inspiration.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Online Highscores verwalten

Beitrag von Schrompf »

Vielen Dank, ich schau mir das mal an.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten