GameMaker und Server Kommunikation

  • GM 8

    GameMaker und Server Kommunikation

    Hallo,

    ich nutze GameMaker:HTML5 und möchte gerne die HighScore Liste in der Datenbank speichern. Mein Problem ist an der Stelle, dass ich hierfür per AJAX die Punktzahl an den Server senden muss, was theoretisch jeder einfach fälschen könnte. Die Punktzahl zu verschlüsseln, wäre wahrscheinlich auch nicht sehr hilfreich, da der Verschlüsselungscode mittels JS Beautifier und diversen Tools sicherlich schnell in der JavaScript Datei gefunden wäre.

    1. Wie kann ich Daten aus meinem GameMaker Spiel sicher an den Server senden, ohne dass User diese Daten einfach so manipulieren können?
    2. Gibt es eine Möglichkeit bei GameMaker:HTML5 zwei User ein gemeinsames Spiel spielen zu lassen, wo die Bewegungen vom Beiden nahezu in Echtzeit zu sehen sind. Mit AJAX habe ich starke Verzögerungen, wodurch ein gemeinsames Spiel nicht möglich ist.

    Gruß
    1.
    Ja, AJAX Request sind leicht zu fälschen. Du musst dir ein smartes System aus fälschungssicheren Keys ausdenken. Ich habe da nicht so viele Erfahrungen, aber denk mal drüber nach, dass der Server einen key ausstellt, den deine App wiederum nutzen muss, wenn er was wieder antwortet. Vllt gar noch diesen Clientseitig manipulieren. Wenn das obfuscatest ist das verhältnismäßig sicher. Zb, lass es sein, fertige Funktionen für diesen Job zu definieren. Dann muss der Nutzer nicht einfach diese aufrufen. Wenn das jmd knakt, hat er sich den Score auf jeden Fall verdient.

    Ein Beispiel:
    1. Du willst Score senden und fragst Server nach einem Key
    2. Der Server generiert dir einen, sagen wir mal diesen md5: 86fb269d190d2c85f6e0468ceca42a20
    3. Du manipulierst ihn auf eine ganz besondere und verzwickte art und weise, um dich ein bisschen vor gefälschten Clienten zu schützen. Stelle sicher, dass es sich nicht reversen kann. Wenn zb sowohl 2 und 8 zu 5 werden, weiß der der den request abfängt und ausließt später nicht, ob mit 5, 2 oder 8 gemeint ist.
    4. Du sendest die Daten und den neuen Key an den Server.
    5. Auf dem Server ist der selbe Manipulationsalgorithmus implementiert. Der checked dann, ob der key dann der gleiche ist.

    Du siehst, es gibt einfach keine fälschungssichere Methode - wir können es nur hart machen, für den Hacker.

    2.
    Ajax ist für Mehrspieler absolut ungeeignet, da bei jedem mal Datenaustausch ein ganzer HTTP Header mitfolgt. Auch wenn du alles überflüssige auslässt, bleibt viel über. Einen neuen Ansatz bieten dort sogenannte WebSockets. Diese sind jedoch sehr schlecht implementiert in den heutigen Browsern. Meistens muss der User gar diese erst in den Einstellungen aktivieren. Socket.io ist eine Javascript lib, die deine Bedürfnisse erfüllt. Wenn du an die 39DLL gewohnt bist, kannst du socket.io im 39 Kleid benutzen, nennt sich dann 39js.

    MfG SDX
    Hi SDX,

    also deine Idee mit dem Verschlüsseln ist richtig. Ich bin selbst Programmierer und hätte da schon n paar nette Ideen. Mein Problem ist aber, dass der Verschlüsselungsalgorithmus im JavaScript Code der GameMaker Datei steht, sprich in dem automatisch generierten Code. Dieser ist zwar unleserlich, aber mit Hilfe von JS Beautifern und diversen Tools, kann man die Stelle im Code raus filtern, die den angeforderten Key verschlüsselt. Dort würde dann der Algorithmus im Klartext stehen. Ich habe da ne Idee für ne ganz besondere Verschlüsselung. :thumbsup:

    Zu deiner Idee mit den Websockets, das interessiert mich sehr. Davon habe ich gar keine Ahnung ehrlich gesagt. Da werde ich mich dann mal reinlesen. Außerdem muss ich mal schauen, wie das seitens der Hoster ist. Aber genau das hatte ich gesucht.

    Vielen Dank. :thumbup:
    Nur zur Verständlichkeit: Socket.io oder 39js haben nichts mit WebSockets zu tun, auch wenn die beiden im selben Absatz gelandet sind.
    Ich persönlich würde da zur 39js greifen - da diese ist absolut äquivalent zur 39DLL ist. Somit bist du für dem Fall der Fälle, dass deine Arbeit ebenfalls auf PC released werden soll, gewappnet. Oder halt 39dylib, für Mac.
    Außerdem ist es immer praktisch, die 39'er zu kennen, auch für zukünftige Projekte, da dies schlechtweg die Implementation von Sockets für den GM ist.

    EDIT: solange der Hoster natürlich "nur" ein Webserver ist, und auch nur auf HTTP gehorcht, ist die ganze Veranstaltung ein bisschen überflüssig. Denn dann wirst du nicht umgehen können, mit HTTP zu kommunizieren (sprich: gewichtiger Header mit in jedem noch so kleinen Transfer).
    Wenn du jedoch auch deine eigenen Applikationen ausführen kannst, wie auf V-Servern o.Ä. würde ich dir unabhängig vom OS nicht empfehlen, die Serversoftware im GM zu produzieren. Falls du nur des GML mächtig bist, kannst du ja mal einen Blick auf Python werfen. Ist sehr ähnlich und schnell gelernt. Da du aber einen erfahreneren Eindruck machst, wirst du ja schon selber am besten wissen, was dir da passt und liegt.

    MfG SDX

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SDX“ ()

    Hi SDX,

    also ich habe gerade feststellen müssen, dass 39js und Co. NodeJs benötigen, wo der Spaß dann schon bei meinem Hoster aufhört. Ich habe mich bisher nie wirklich mit solchen Server Geschichten auseinandergesetzt, da ich beruflich wirklich momentan nur mit PHP programmiere. Ich würde mich da echt gerne mit auseinandersetzen, sowohl mit Python, als auch mit den V-Servern. Kennst du da ein gutes Angebot, oder machst du dir deinen eigenen Rechner zum virtuellen Server?

    Gruß
    Solange du wirklich nicht aufs große gehst, würde ich dir empfehlen, erst mal alles lokal zu machen. Erst wenn es um das veröffentlichen geht, weißt du auch, was du brauchst. Es kann ja sein, dass du irgendwelche serverseitigen Finessen implementieren willst, die besonderes erfordern. Sonst gilt: Du kannst immer, auf Grabbelniveau versteht sich, ab 10€ monatlich einen kleinen V-Server mit Domain bekommen. Aber schau dir wirklich erst mal an, ob und was du brauchst.

    Da du PHP beherscht, bleibt Python eine gute Wahl. Aber wieder gilt, je nachdem als was es sich entpuppt musst du dich erst mal umschauen. Natürlich gibt es für Python auch die notwendigen Libs für Datenbankmanagement, Networking, usw, was du eben brauchst. Aber das gibt es so gut wie überall. Populär für solche Sachen ist auch Java, aber auch die ewigen Klassiker wie C und C++.

    MfG SDX