Fragen für ein Onlinegame

  • Ersteller Ersteller starsecurity
  • Erstellt am Erstellt am
S

starsecurity

Gast
Hallo,

Ich habe schon eine Art Browsergame ausgarbeitet und sie dann einfach auf einen Server gestellt und jetzt gibt es nur ein paar Probleme, deshalb muss ich jetzt leider alles neu proggen, aber erst einmal:


Das größte Problem ist das Botproblem oder dass man die Daten verändert, die an meinen Server geschickt werden.

Nehmen wir einfach ein simples Spiel her:
Ein Männchen kann durch die Tastatur gesteuert herumlaufen. Doch damit jetzt keiner etwas verändert, muss ich ja alles auf meinem Server auch rechnen und dann die Daten abgleichen. Doch wenn da jetzt 50 Leute gleichzeitig herumrennen und dann noch etwas bedienen, würde das meinen Server abkratzen lassen. Wie kann man effektiv so etwas vorbeugen?


Einfach den Server alles nachrechnen lassen kommt nicht in Frage.

Wie kann ich da vor Betrug schützen, möglichst Ressourccenschonend?




Und dann noch eine Frage:

In welcher Programmiersprache wäre es am besten, so ein Game das im Browser laufen soll zu schreiben? Ich werde mir dann diese Sprache aneignen(falls ich sie noch nicht kann) und dann das Spiel von Grund auf neu schreiben!
 
Schau dir an wie ein normaler Fortschritt aussieht und alles was "schneller" ist schauste dir halt mal manuell an. Solang dein Game klein ist reicht das allemal aus.
In großen BG's wird vieles aufm Server nachgerechnet, aber da brauchste dann auch entspechende Server. Ansonsten könntest du vllt mit verschlüsselten Daten arbeiten die nicht so leicht zu ändern sind...
 
In welcher Programmiersprache wäre es am besten, so ein Game das im Browser laufen soll zu schreiben? Ich werde mir dann diese Sprache aneignen(falls ich sie noch nicht kann) und dann das Spiel von Grund auf neu schreiben

Da bist du in 2 Welten, zum einen hast du die Serverkomponente, die du in jeder beliebigen Sprache schreiben kannst. Es kommt nur darauf an das diese Serverkomponente in der Lage ist, auf einem Port (für Browser wäre das üblicherweise der Port 80) Requests entgegen zu nehmen und dann entsprechende Response zurück senden zu können. Je nachdem kannst du das ganze innerhalb eines Webservers betreiben, was dann die Möglichkeiten minimal (wenn überhaupt) einschränkt oder du konzipierst die Serverkomponente vollständig autark. Ist zwar etwas mehr arbeit, da du dir hier Gedanken über das zu verwendende Protokoll/Kommunikation machen musst, aber auch nicht wirklich tragisch. Nimm am besten die Sprache die du schon beherrschst. Für die Client-Seite wirst du dann auf eine der üblichen Verdächtigen zurückgreifen müssen, z.B. Javascript oder Java, um den Einsatz über den Browser sicherstellen zu können.

Für die Kommunikation bzw. die Übertragung der Daten würde ich einen der üblichen Verschlüsselungsalgorithmen verwenden, z.B. RSA, AES (Rijendael) ... Genauso wäre es denkbar, das man die Daten auch signiert, d.h. es werden Hashcodes (z.B. mit SHA) von den zu übermittelnden Daten gebildet, die dann mit einem Public Key/Private Key signiert werden. Sowohl die Daten als auch die Signatur werden dann an den Server übermittelt. Das führt dazu das ein Angreifer die Daten zwar ändern kann jedoch würde die Änderung für den Server erkennbar, da die Signatur nicht mehr mit den Daten übereinstimmt. Natürlich könnte der Angreifer auch die Signatur entsprechend nachberechnen, wird jedoch schwieriger und ist nicht mehr so ohne weiteres von einem Scriptkiddie lösbar. Wenn du zuerst die Daten signierst und danach verschlüsselst, dürftest du relativ sicher sein. Aber sei gewarnt 100% Schutz wird man nie erreichen, da sich das ganze im Fluß befindet und früher oder später doch Angriffsvarianten auftauchen werden falls es diese noch nicht gibt. Sicherheit ist ein Prozess und kann nicht durch das installieren einer Software XYZ für immer sichergestellt werden.

Suche mal im Netz nach: RFC 1945, RFC 2616, AES , Rijendael, RSA, SHA

Edit: Allgemein kann es auch nicht schaden, wenn du dir diverse Algorithmen für die verschiedenen Aufgaben aneignest, z.B. Sortierungen (ala Quicksort, Introsort, Mergesort) oder binäre Suche oder binäre Bäume um die Berechnungen/Codes innerhalb deines Spiels für die Serverkomponente effizient gestalten zu können. Die Sprache ist da nebensächlich. In vielen sind bereits diese integriert oder über Bibliotheken fertig verwendbar. Schau sie dir dennoch an und entscheide welche du verwenden kannst/willst.
 
Zuletzt bearbeitet: (Allgemeine Ergänzungen fürs Programmieren)
ich hab auch schon probiert, die Daten mit Rijendael zu verschlüsseln, was ziemlich gut funktioniert hat.

jetzt noch zum spiel:
ist es eher besser, das game in flash zu schreiben und in die website einzubetten, oder in java? eher java, oder?
 
am besten wäre wahrscheinlich reines javascript, da das ja von jedem browser unterstützt wird und flash auf älteren rechnern ziemlich unperformant ist. java applets sind aber noch grauslicher und eigentlich zum glück schon ausgestorben. oder meintest du javafx? der vorteil wäre dass javafx mit eclipse zum programmieren kostenlos ist, flash builder usw. ist das nicht.
 
in Javascript kannst du schon recht viel reißen, jedoch denke ich das Java z.Z. mehr Möglichkeiten bietet. Wie Fatal Error schon schrieb, hast du bei JavaScript recht hohe Chancen, dass es auf den unterschiedlichsten Browsern läuft. Java im Prinzip auch, dennoch ist bei Java die Installation einer Runtime erforderlich. Ist bei vielen Betriebssystem zwar integraler Bestandteil, dennoch kann man sich nicht wirklich darauf verlassen. In wieweit sich die Einbindung in der Webseite gestaltet, kann ich dir nicht wirklich sagen. Alternativ könnte man sich auch vorstellen, das man das Ganze so aufzieht, das der User das Java-Programm runterlädt und lokal startet, d.h. ohne Browser. Dann wäre auch diese Abhängigkeit nicht mehr vorhanden.

Im übrigen gabs vor kurzem auch einen Artikel darüber das Google-Entwickler das Spiel Quake in JavaScript / HTML 5.0 portierten.
https://www.computerbase.de/news/gaming/quake-ii-engine-auf-html5-portiert.27341/

Also läßt sich in der kommenden Zeit wohl einiges erwarten, welche Technik/Umgebung du verwendest, musst du allerdings selber entscheiden. Auch eine "Fehlentscheidung" für die "falsche" Technik/Umgebung ist nicht weiter tragisch, da du auch darin Erfahrungen sammeln wirst!

Edit: Zum Flash kann ich dir nichts sagen, da ich weder Flash aktiv "genutzt" habe, noch Interesse habe, darin etwas zu machen. Flash sieht mir wie eine proprietäre Lösung aus, die es für mich somit als uninteressant und weniger zukunftsorientiert werden läßt. Aber das ist meine ganz persönliche Einschätzung einer Sache mit der ich nichts zu tun hatte/habe und haben werde...
 
Zuletzt bearbeitet: (Meinung zu Flash ergänzt)
Zurück
Oben