Autor Beitrag
beginner98
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 12.01.15 22:12 
Hallo,
ich möchte seit Längetem ein serverseitiges Minispiel programmieren.

Es handelt sich um ein 2D Racing Spiel im Retro-Look, das beim Gameover für jede während der Strecke gesammelte Münze einen Wert in der Spalte "Münzen" der MySQL-Datenbank um 1 erhöhen soll.

Was mich aber davon abhält, ist die Gefahr, dass jemand den Wert des int-Wertes der Münze manipulieren könnte.

Beispiel: Am Anfang des Races ist gegeben:
int coins = 0;

Nach 20 Sekunden hat Spieler Max 6 Münzen gesammelt.
int coins = 6

Durch Manipulation bringt er den Wert auf 2000.
int coins = 300000;

Beim Gameover werden uhm in der MySQL-Datenbank 300000 erschummelte Münzen gutgeschrieben, die er eigentlich nicht besitzen dürfte.


Nun die Frage: Wie kann ich mein C# Spiel möglichst sicher vor Hacker schützen? So sicher, dass selbst Geheimdienste es nicht schaffen, müsste es auch nicht sein.

Ich habe das Stichwort RSA erhalten, weiß jedoch nicht, ob dieses Kryptosystem sicher genug ist. Auch sind mir Sockets mit Threads eingefallen, mir ist jedoch unbekannt, wie ich den Socket sichern könnte. Vielleicht irgendwas mit Sicherheitskeys?

Ich danke im Voraus!
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Di 13.01.15 01:26 
Kurze Antwort: das geht nicht.

Wenn du nicht willst, dass ein Spieler Daten verändert, dann gib sie ihm nicht sondern berechne sie am Server.

_________________
ja, ich schreibe grundsätzlich alles klein und meine rechtschreibfehler sind absicht

Für diesen Beitrag haben gedankt: beginner98
beginner98 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 13.01.15 03:33 
Ok, das habe ich mir schon gedacht.
Wie könnte ich die Daten denn am Server brechnen? Es muss ja erkannt werden, wann der Spieler eine Münze aufhebt und dazu muss der Client bzw. die Anwendung des Spielers dem Server ein Zeichen geben.

Hast du ein Beispiel?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 13.01.15 11:07 
Zitat:
Es muss ja erkannt werden, wann der Spieler eine Münze aufhebt und dazu muss der Client bzw. die Anwendung des Spielers dem Server ein Zeichen geben.


Nein? Wenn das Spiel quasi auf dem Server stattfindet und der Client an den Server die Clienteingaben weitergibt, der Art "ich habe gerade nach rechts gelenkt, ich habe nach links gelenkt, ich habe gebremst, ich habe beschleunigt" dann kann der Server die Position auf der Strecke selbst bestimmen und ermitteln ob ein Münze überfahren wurde oder eben nicht. Das muß ihm der Client nicht sagen. Umgekehrt muß der Server dem Client Bescheid sagen das entsprechendes vorgefallen ist damit der Client das passende anzeigen kann. Der Server sollte auf die oben genannten ~Signale~ die vom Client an den Server gesendet werden nur ihre Sinnhaftigkeit prüfen. Eben der Art ob diese Serie von Steuersignalen überhaupt menschenmöglich ist.

Für diesen Beitrag haben gedankt: beginner98
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Di 13.01.15 13:54 
Eigentlich kann der Client ja durchaus die Räume und Laufwege, Positionen von Monstern usw. kennen. Aber ansonsten ist der Client nur für das Anzeigen des Spiels zuständig.

Ansonsten sendet der Client nur Infos über seine Bewegungen und Aktionen zum Server und dieser entscheidet über die besonderen Events (Aggro-Range unterschritten, ergo Monster greift an, in eine Falle getreten und HP werden abgezogen, über eine Münze gelaufen) und sendet entsprechende Informationen zum Client zurück - der dann nur noch die Anzeige macht.

So funktioniert WoW (wenn auch einige Zehnerpotenzen komplexer) und nahezu alle MMO's.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.

Für diesen Beitrag haben gedankt: beginner98
beginner98 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 13.01.15 17:36 
Danke, ihr habt mir sehr weitergeholfen! :D