Angenommen, ich mache ein JavaScript-Spiel und möchte, dass das Spiel den Server aktualisiert, wenn der Benutzer das Spiel und sein Ergebnis erfolgreich abgeschlossen hat.
Wie soll ich sicherstellen, dass die Anfrage vom JavaScript-Spiel stammt und die gesendeten Daten nicht manipuliert wurden? Ich verwende PHP als serverseitige Sprache.
Ich verstehe, dass keine Strategie zu 100% narrensicher sein wird, und alle ergriffenen Maßnahmen sind eher eine Abschreckung als ein absoluter Schutz.
Beim Bearbeiten: Nehmen wir an, wir verwenden nicht die Serverüberprüfung des Schritts jedes Benutzers (wie in einem herkömmlichen MMO). Das Spiel kann ein Minispiel als Teil eines Web- oder Lernspiels sein (z. B. Space Invaders oder ein Echtzeitspiel), und das Erfordernis einer serverseitigen Komponente für jedes dieser Spiele kann langwierig sein.
Beispiel: Angenommen, wenn das Spiel beendet ist, wird eine Anfrage über an den Server gesendet. AJAX
game_finished.php?user_id=1&outcome=success&score=88
Ein Benutzer könnte den Server "vortäuschen", indem er glaubt, dass das Spiel korrekt abgeschlossen wurde, indem er diese Anfrage an game_finished.php sendet. Wie könnte dies erschwert werden?
quelle
Sie können dies auf Warcraft-Weise tun: Verwenden Sie Javascript nur zum Senden von Bewegungsbefehlen an den Server und lassen Sie den Server die Logik verarbeiten.
Dies lässt Sie immer noch offen für Roboter (Javascript-Programme, die Dinge schneller und präziser als menschlich möglich bewegen), aber das ist ein großer Schritt im Vergleich dazu, die Tür für den Trick /game_finished.php offen zu lassen.
quelle
Wenn der Client die Punktzahl berechnet, gibt es keine Möglichkeit, sie zu validieren, außer (wie bereits erwähnt), dass der Server das Spiel erneut spielt, um zu bestätigen, dass die gleiche Punktzahl erzielt wird.
Es gibt jedoch Arten von Spielen, die Sie entwerfen können und die nicht nur auf einer numerischen Punktzahl basieren. Ein serverseitiges Skript kann beispielsweise ein mathematisches Problem mit zufälliger Addition erzeugen. Wenn der Benutzer die Antwort übermittelt, kann er seine Antwort mit der richtigen vergleichen und sie serverseitig bewerten.
Wenn Ihr Spiel jedoch komplex ist (wie im Beispiel des Space Invaders), können Sie nicht viel dagegen tun, außer a) dem Client zu vertrauen oder b) den Server das Spiel verwalten zu lassen.
quelle
Es gibt viele Methoden, aber alle werden irgendwann scheitern. Sie können einen Hashwert hinzufügen oder den Abfrageschlüssel bei jeder Abfrage erneuern.
Das Wichtigste ist jedoch, dass alle Ihre Superkodierungsfunktionen als Quellcodes an den Browser des Kunden gesendet werden, und das ist DAS Problem. Um es etwas schwieriger zu machen, können Sie die Funktion "Senden per Ajax-Abfrage" verwenden, sodass Quellen nicht unter einer URL verfügbar sind. Die Funktion sollte komprimiert und möglicherweise sogar in Teilen gesendet werden, damit es schwieriger wird, alles zu kopieren. Ich würde diesen Code auch auf einer Seite wie http://jsbeautifier.org/ überprüfen, wenn Ihr Code nach dem Lesen leicht verständlich ist.
quelle