Wie schütze ich das Senden von Ergebnissen aus HTML5-Spielen an meinen Server?

13

Im Backend benutze ich Java. Ich habe ein Spiel in HTML5; Wenn der Benutzer fertig ist, schicke ich einen Ajax-Aufruf, um die Partitur in der Datenbank zu speichern. Jetzt kann jemand einfach Tools wie Fiddler und Firebug verwenden, um diese Ajax-Anforderung zu ändern und eine viel bessere Punktzahl an den Server zu senden. Wie stelle ich sicher, dass der Benutzer keine Partituren manipulieren kann?

Deepak
quelle

Antworten:

18

Senden Sie nicht einfach eine Ganzzahl an den Server. Senden Sie eine Sammlung von Spielstatistiken, mit denen überprüft werden kann, ob das Ergebnis realistisch ist. Oder Sie können einen Pre-Shared Key für die Berechnung der Punktzahl implementieren . Sie können während des Spiels inkrementelle Punktzahlen und Statistiken senden und sicherstellen, dass die Erhöhung angemessen ist.

Ich würde mir jedoch nicht allzu viele Sorgen machen. Die obigen Vorschläge machen es schwieriger, aber nicht unmöglich, eine gefälschte Punktzahl zu senden. Wenn Sie es jedoch etwas schwieriger machen, wird die überwiegende Mehrheit der Spieler, die Ihr Spiel spielen, nicht daran interessiert sein, es zu betrügen.

Achten Sie darauf, wie Ihr Spiel mit Ihrem Server kommunizieren kann. Sie möchten nicht, dass Ihr Spiel ein Einstiegspunkt für das Hacken auf Ihren Server ist. Stellen Sie sicher, dass Sie Ihre Eingaben immer validieren und dem Client niemals vertrauen.

MichaelHouse
quelle
@ Byte56 Keine Form der Verschleierung oder Verschlüsselung schützt Ihren Code vor einem Debugger, der zum Ändern der Spieldaten während des Spiels verwendet wird. Wenn das Gameplay auf dem Client stattfindet, ist es im Grunde unmöglich, diese Form des Betrugs zu verhindern. Ein Javascript-fähiger Browser ist kein vertrauenswürdiges Computergerät.
MarkR
10

Wie Byte56 sagte: "Vertraue niemals dem Client", aber:

Niemals dem Kunden zu vertrauen hat einen Preis:
Wenn alle Spiele auf dem Server gespielt werden, steigen die Infrastrukturkosten erheblich.

Vorausgesetzt, die meisten Spieler werden nicht schummeln
und die höchste Punktzahl wird sich nach kurzer Zeit einstellen und aufhören, sich stark zu verändern

Es gibt einen Mittelweg.

Zeichnen Sie die Spiele auf (auf dem Client).
(Abhängig von der Spielart kann dies sehr einfach (z. B. Schach) oder etwas kompliziert (z. B. Multiplayer-FPS) sein,
aber es ist immer machbar.)

Wenn ein Spieler ein Spiel beendet, reichen Sie einfach die Punktzahl ein.
Wenn die Punktzahl in einem bestimmten Bereich oben liegt (z. B. unter 1% oder unter 5),
fordern Sie die aufgezeichneten Daten vom Spieler an
und wiederholen Sie das Spiel auf dem Server.
Wenn die Ergebnisse übereinstimmen, akzeptieren Sie die Ergebnisse.

Auf diese Weise benötigen Sie für die meisten Spiele keine zusätzlichen serverseitigen Ressourcen,
können jedoch sicherstellen, dass die besten Ergebnisse gültig sind.

Andreas
quelle
2
Mit anderen Worten, wen interessiert es, wenn sie um etwas anderes als die besten Ergebnisse betrügen (warum sollten sie das überhaupt tun?), Also sind dies die einzigen, die Sie validieren müssen.
jhocking
4

Kümmere Dich nicht darum; Schutz vor allen Angriffen ist grundsätzlich unmöglich, wenn Sie dem Client vertrauen. Wenn niemand Fiddler usw. verwendet, um die AJAX-Anforderung zu ändern, kann er einfach einen JS-Debugger starten und Ihre Spieldaten ändern, um sich selbst 1000 Leben usw. zu bescheren, Ihren Code zu ändern oder 100 andere Dinge zu tun, an die Sie nicht gedacht haben.

Ich habe ein solches Spiel vor einigen Jahren geschrieben und nach meinem besten Wissen hat niemand auf diese Weise betrogen. Es gab keinen Preis, außer dass Ihr Name auf der Punktetabelle stand.

MarkR
quelle
4

Reduzieren Sie die soziale Motivation zu betrügen, indem Sie z. B. soziale Bestenlisten verwenden (Betrügen macht nur eine Handvoll Freunde ansprechend, es verwöhnt nicht alle).

Überprüfen Sie auf dem Server. Joel Poloney hatte eine gute Beschreibung der Techniken in Game Developer 2012 September "Scale Your Online Game"

Vincent Scheib
quelle
2

Wenn Sie ein betrugsicheres Online-Spiel erstellen möchten, müssen Sie die gesamte Spielelogik auf dem Server verarbeiten. Alles, was auf der Client-Seite passiert, kann vom Benutzer gesteuert und manipuliert werden. Es gibt Techniken wie Verschlüsselung oder Verschleierung, die Sie ausprobieren können, aber am Ende ist alles nur Sicherheit durch Verschleierung, die von jemandem umgangen werden kann, der ausreichend entschlossen ist.

Sicher, ein Spiel, das auf dem Server läuft, ist viel komplizierter zu entwickeln, erfordert viel mehr Ressourcen auf der Serverseite und die Netzwerklatenz wirkt sich nachteilig auf das Spielerlebnis aus (insbesondere bei schnellen Spielen), aber dies ist der einzige Weg, effektiv zu sein Verhindern Sie, dass die Spieler betrügen.

Philipp
quelle
Selbst das wird nicht alles vor Schummeln bewahren - nur das offensichtliche Zeug "Ja, ich habe wirklich eine Unmenge an Punkten". Da auf dem Client etwas ausgeführt werden muss, haben sie trotzdem eine gewisse Kontrolle. Zumindest ist jeder Client - insbesondere ein Webbrowser - skriptfähig.
cHao