Integrität von Daten in HTML5-Spielen

  • Da ich mich in letzter Zeit ein wenig mit der Entwicklung von HTML5 Spielen auseinandergesetzt habe und nun an dem Punkt angekommen bin, an dem ich gerne diverse Ranglisten implementieren möchte, ergibt sich hier für mich eine Frage. Wenn das Spiel beendet ist möchte ich mit einem ajax-Request die Punkte an den Server übermitteln um diese in der Db zu speichern. Bei diesem Transfer ist es aber natürlich ein leichtes mit geeigneten Tools die Daten zu manipulieren bevor sie am Server ankommen. Daher würde ich gerne wissen, wie man auf diesem Weg die Integrität der Daten sicherstellen kann. Meine erste Idee war hier eine Einweg-Verschlüsselung auf Client-Seite bevor die Daten abgesendet werden mit einer nachherigen Überprüfung auf Serverseite. Hier ergibt sich aber wieder das Problem , dass der Quellcode auf Client-Seite immer sichtbar ist und somit das VErschlüsselungsverfahren bekannt ist. Der Angreifer bräuchte dann eben nur seine gewünschten Punkte mit diesem Verschlüsseln und diesen verschlüsselten Code während der Übertragung mit seinem richtigen Score austauschen. Kennt jemand von euch dazu eine gute Lösung? :)

  • Ein direktes Verfahren ist mir nicht bekannt. Theoretisch kann der Benutzer selbstverständlich alle möglichen Daten einschleusen.


    Jetzt kommt es etwas auf das Spiel an. Einerseits fiele mir ein nicht die kalkulierten Punkte sondern die ausgeführten Aktionen zu übergeben und die Punkte serverseitig zu berechnen und zu verifizieren. Das setzt natürlich mehr Datenaustausch voraus. Ein anderer Weg wäre je nach Fall eventuell auch die Logik zu überprüfen. Wenn ich ein Spiel programmiere weiß ich in etwa (wenn ich das professionell mache sogar exakt) wie viele Punkte in welcher Zeit erreichbar sind. Dann könnte man vor Spielbeginn die Zeit feststellen, nach Ende des Spiels die Differenz ausrechnen und mit den Punkten vergleichen. Serverseitig versteht sich.


    Solche Algorithmen gibt es in vielen Spielen. Meist fangen sie relativ simpel an und werden mit Zahl der Spaßvögel die betrügen wollen immer komplexer. Da ist viel möglich.

  • Client-side ist immer Mist.
    Der "Angreifer" bräuchte evtl nicht mal die Verschlüsselung kennen, sondern ändert den Wert, der genutzt/verschickt werden soll, einfach vor der Verschlüsselung.


    Allgemein hast Du ~keine Chance. Der Angreifer kann ja Events auslösen ("End-Buton") wenn er sie kennt.
    Du kannst es Ihnen nur so schwer wie möglich machen. (zB was Basii sagte - unmögliche Daten verwerfen).


    Ich kenne das zB von Battlefield Games. Dort gibt es:
    - "PunkBuster" -- ein tool das jeder Client am laufen haben muss welches dann nach bekannten Cheats ~sucht
    - FairFight -- Tools (nicht Client-side), die nach vorgegebenen Regeln der Devs nach unmöglichen Stats suchen (...)


    Ersteres (ein Tool das in Deinem Fall nach bekannten Cheat-Scripten sucht) kannst Du vergessen. Denn das Script könnte jeder einsehen und ändern.