Wie mache ich ein sicheres Spiel in Javascript?

8

Ich arbeite an Spielen mit JavaScript einige HTML und CSS, und ich fragte mich, ob es eine Möglichkeit gab, das Spiel zu sichern, so dass der Benutzer nicht einfach game.php aufrufen kann, um das Spiel zu beenden einen Punkt verdienen.

Im Moment hier ist die Lösung, die ich habe.

  • Starten Sie die Seite für ein Zufallsspiel mit dem Ergebnis bereits vorhanden, gewinnen oder los, dann mach einfach was Animationen, um es zu zeigen, aber alle punkten und gewinnen / loses Zeug ist fertig serverseitig.

  • Für ein Kampfspiel, einfach die Aktion von dem JavaScript-Aufruf und Mach die Schadensberechnung, Reaktion der Gegner auf dem Server und einfach senden Sie die Daten zurück.

aber die letzte Lösung impliziert, dass ich jedes Mal Aktionen senden muss, wenn der Benutzer etwas unternimmt. Dies könnte für ein Turn-by-Turn-Battle-Spiel funktionieren, aber ich denke, es wäre zu langsam für jede andere Art von Spiel. Also meine Frage ist, gibt es eine Art von sicherer Art und Weise kann ich mein Javascript vorbereiten, um die Informationen gesendet zu sichern.

    
rnaud 30.03.2010, 08:48
quelle

5 Antworten

14

Die einzige Möglichkeit, um sicherzustellen, dass die gesamte Berechnung und Validierung auf der Serverseite erfolgt. So ist es bei fast allen Online-Spielen. Der Client kann niemals der Online-Kommunikation vertraut werden und Sie müssen immer auf der Serverseite sicherstellen, dass der Benutzer tatsächlich etwas Gültiges tut. (In der Praxis muss man dem Client in der Praxis allerdings etwas für die Lagkompensation vertrauen und einige unkritische Dinge auf die Clientseite verlagern).

Aus diesem Grund ist Javascript keine sehr gute Sprache für die Entwicklung eines Online-Spiels, da jede Aktion vom Server verarbeitet und validiert werden muss. Für andere Programmiersprachen ist das kein so großes Problem, weil Sie Ihre eigenen Kommunikationsprotokolle mit TCP / IP für den Server und den Client erstellen können. Für JavaScript ist dies jedoch nicht möglich, da Sie sich auf das HTTP-Protokoll und die XMLHTTPRequest-Handler verlassen müssen, die eine sehr ineffiziente Live-Client-Server-Kommunikation ermöglichen.

Wie Sie schon gesagt haben, können Sie die Oberfläche immer in Javascript ausführen, aber aus Sicherheitsgründen müssen Sie auf der Serverseite immer noch viel tun, was bei Spielen, die mehr Action-orientierte Kontrolle erfordern, nicht funktioniert. Also, Sie sind ziemlich beschränkt auf basisbasierte Spiele, wenn Sie die Sicherheit brauchen.

    
Rithiur 30.03.2010, 09:08
quelle
2

Du könntest etwas tun, um den naiven Benutzer zu vereiteln, aber wahrscheinlich nicht alle. Alles hängt davon ab, wie motiviert die Person ist, Ihr Spiel "anzugreifen". Am Ende des Tages könnte der Benutzer einen JavaScript-Debugger verwenden, um genau zu sehen, was der Code macht, und ihn zu replizieren. Selbst wenn Sie jede Spielaktion zurücksenden, könnte der Benutzer dies noch replizieren. Wenn Sie nicht genau wissen, welche Aktionen der Benutzer ausführen kann, können diese möglicherweise Aktionen zurücksenden, die unmöglich wären, wenn sie das Spiel mit dem Standardsteuerschema steuern würden.

    
Kibbee 30.03.2010 08:53
quelle
2

Es sollte keine URL für den Sieg geben. Während des Spiels sollte der Client den Benutzer Aktionen senden, und wenn sie gewonnen haben, leitet der Server sie auf die Sieg-Seite um.

Auf der Sieg-Seite sollte keine Berechnung / Belohnung erfolgen, falls vorhanden.

    
Anurag 30.03.2010 08:54
quelle
1

Nein, es gibt keinen Weg.
Was ist falsch beim Senden von Benutzeraktionen an den Server?

    
Your Common Sense 30.03.2010 08:51
quelle
1

Wäre das eine Option? (Späte Antwort)

Übertrage das Kritische (Zeug, das du nicht gehackt werden willst) auf einen versteckten internen Flash-Player, der sowohl als kritischer Variablenspeicher, Taschenrechner (zB: Life Points) als auch als "Communicator" für den Server fungiert Spieldaten.

Es ist definitiv sicherer als JavaScript. Aber dennoch; Es ist immer am besten anzunehmen, dass Ihre Client-Seite zu 100% nicht sicher ist. (Auch in C ++ - Spielen, lol: Hacker)

Wenn Sie jedoch den Datenverkehr für Spieldaten in Flash übertragen, können Sie einige seiner interessanteren Kommunikationsfunktionen nutzen, z. B .: P2P =)

    
PicoCreator 03.07.2011 02:55
quelle

Tags und Links