Frage

Welche Art von Neulingsfehlern haben Sie gesehen und was sind die Heilmittel?

Einer, der immer wieder auftritt, wird der Client nicht gegen Server überprüft.

Zum Beispiel:

  • Benutzer dekompiliert die Flash -Spielequelle oder hört auf den Netzwerkverkehr zu und sieht, wohin hohe Score -Daten vorliegen, und sendet fehlgeschlagene hohe Punktzahlen dort nicht einmal das Spiel.
  • Der Benutzer verwendet Trainer und erhält ein Element, das möglicherweise sogar nicht in der aktuellen Ebene angezeigt wird. Dies sendet an Server wie "Client X Got Element Y" und der Server akzeptiert dies nur.

Die einfache Heilung ist natürlich nur als API für den Server mit dem Gaming -Client bearbeitet. Dann kann der Benutzer Trainer und andere Speichermanipulationen genauso verwenden, aber Server sagt nur, dass Sie es nicht können. Denken Sie den Server als eine Datenbank an, in der Sie Dinge mit Spielregeln abfragen können.

Zum Beispiel

  • Kunde: Startet Spiel
  • Client: stellt eine Verbindung zum Server her
  • Client: Abfragen des verfügbaren Geldes vom Server
  • Benutzer: Ermöglicht Trainer, der Geld auf unendlich einsetzt
  • Client: Server.buyItem ('sehr teuer')
  • Server: Überprüft Gamestate (Benutzer können jetzt Dinge kaufen). Überprüft den Spieler [0] .Money -> Kein Bonus.
  • Client: server.buyItem ('kann das bekommen')
  • Server: Überprüft Gamestate (Benutzer können jetzt Dinge kaufen). Überprüft den Spieler [0] .Money, OK. Spieler [0] .Items.Add ('kann das bekommen'), was die Kosten von Spielern senkt [0]. Dann informieren Sie den Kunden senden (Spieler [0], 'Artikel', 'kann das bekommen'); Send (Spieler [0], 'Geld', Spieler [0] .money).

Die andere Möglichkeit besteht darin, die Bewegungen des Clients aufzuzeichnen und diesen an HighScore -Server zu senden, auf dem der Server ihn abspielt. Natürlich kann dies dazu führen, dass diese Platte sehr groß ist.

War es hilfreich?

Lösung

Ohne Zweifel blinde Vertrauen des Kunden. In einem Spiel, an dem ich arbeite, behalten wir jetzt alle "Geschäftslogik" -Server-Seite und lassen uns die Client-Maschinen nur senden, welche Befehle sie machen. Zum Beispiel "Player B will sich nach rechts bewegen" - aber der Server berechnet, wie weit sie sich rechts bewegt haben. Dies hat einen Leistungsaufwand (und natürlich Probleme mit dem Verzögerung, der besser behandelt werden könnte), sodass ein möglicher Mittelfeld die starken Berechnungen clientseitig durchführen kann und weiterhin Überprüfungen auf dem Server vorhanden sind. Zum Beispiel überprüft, ob sich der Spieler des Kunden mehr bewegt, als in der Zeit zwischen Updates angeblich möglich ist. IE, wenn die MAX -Player -Geschwindigkeit 200 Einheiten pro Sekunde beträgt, wenn Sie nach 0,5 Sekunden ein Update erhalten, sagen sie, dass sie 150 Einheiten verschoben haben, booten Sie sie.

Dies hindert natürlich nicht unbedingt jemanden daran, einen Bot zu codieren, um diese Schlüsselpressen zu senden. Daher gibt es andere Möglichkeiten, sich dagegen zu schützen. Trotzdem ist es ein Neulingsfehler, überhaupt keine Bestätigung zu haben (was ich zugegebenermaßen schuldig war, als ich Abkürzungen machte)

Andere Tipps

Das Annäherungsventil nahm (zumindest an einem Punkt) die Clients und der Server das Spiel unabhängig simulieren. Anschließend führt der Server die maßgebliche Simulation durch und sendet Statusaktualisierungen an alle Clients, um ihre Fehler/Hacking -Versuche zu korrigieren.

ZB, wenn Sie den linken Pfeil drücken, bewegt sich Ihr Charakter sofort nach links. Es gibt keine Wartezeit, bis der Server "OK" sagt. Wenn sich jedoch herausstellt, dass Sie sich über eine Wand gehackt haben, werden Sie mit dem nächsten Server -Update direkt neben der Wand erscheinen, da der Server es als solide ansieht.

Wenn ein Client sieht, dass ein Charakter vorwärts kommt, wird er davon ausgehen, dass er weiter voranschreitet, bis der Server mit einer maßgeblichen Antwort zurückkommt.

Dieser Ansatz besiegt Hacking -Versuche, wenn der Server die Hauptentscheidungen trifft (und im Simulationsprozess die Vernunftprüfungen durchführt) und befasst sich auch mit Verzögerungen, wenn die Clients Vorhersagen machen, bis sie vom Server bekannt sind.

Ein weiterer großer Fehler im Zusammenhang mit "dem Kunden vertrauen" ist, dass Ihr Netzwerkprotokoll nicht gefälscht werden kann. Die Leute neigen dazu zu gehen, dass diese binären Stücke niemals umgekehrt werden, wenn sie binäre Stücke an den Server senden, und dass niemand versuchen wird, mit den Daten zu spielen, um zu sehen, was passiert. Dies hat zu allen möglichen Problemen geführt.

Ihr habt so ziemlich alles abgedeckt, was mit dem Server schief gehen kann, der Clients vertraut. Es gibt keine anderen wirklichen Probleme, an die ich denken kann.

Anstatt Ihnen zu sagen, was schief gehen kann, schauen Sie sich an, was richtig gehen kann.

Ventil hat viel Arbeit in ihre gesetzt Netcode. Lesen Sie es auf

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top