Benutzerdatenbank abfragen, wie am sichersten?



  • Naja bei "richtig" machen, gibt es mehrere Dinge zu beachten ....

    Zuerst solltest du zwischen Accountsicherheit und Passwortsicherheit unterschieden.

    Das erste ist, wie sicher der Zugrif auf deine geschuetzte Ressource ist.
    Das zweite ist, wie sicher das Passwort selber ist, auch nach erfolgten einbruch.

    fürs erste gibts Verschlüsselungsverfahren mit synchroner und asynchroner Verschluesselung.
    Für 2te gilt, niemals mit Passwortern direkt, sondern nur mit hashes arbeiten.

    Wenn dich das wirklich intressiert, solltest dich in die Cryptologie einlesen, also nicht die mathematischen Grundlagen sondern eher Hashes, synchrone und assynchrone verfahren, Key Austausch, ...
    Wenn das geschnallt hasst, ists recht einfach ne Crypto lib (libcrypto z.b.) zu verwenden, oder du nimmst was fertiges.

    Mein Lösungsansatz war: Eine Verbindung zu einer PHP-Seite herstellen und PHP die Abfrage machen lassen, so dass der Client nur noch mitgeteilt bekommt: Erfolgreich/Nicht erfolgreich

    mit php gibts da sicher auch was ...
    Aber nen Java container (jetty, tomcat, glassfish) aufsetzen und nen Sessionorientiertes Protokoll verwenden das die daten aus ner lokalen DB holt, da gibts ne menge möglichkeiten und fertige Lösungen ...

    Willst selber nen Protokoll mit Passwortabfrage auf Basis von Sockets bauen, bietet sich SSL an (und selber natürlich nur gehashte Paswörter verwenden) ...

    Ciao ...



  • 'richtig' machst du es, wenn die (spiel-)logik auf dem server läuft. Nur so kann das umgehen des schutzes verhindert werden.



  • richtig' machst du es, wenn die (spiel-)logik auf dem server läuft. Nur so kann das umgehen des schutzes verhindert werden.

    Sorry, aber diese Information bringt mich irgendwie gar nicht weiter... Mir geht es darum, wie ich generell Daten zwischen Client und Server austausche und zwar so, dass ich dabei möglichst wenig Angriffsfläche biete und gleichzeitig möglichst geringe Manipulationsmöglichkeiten.
    Woher bekommt denn der Server die Informationen? Die zaubert er sich ja nicht her, die bekommt er vom Client, also vom Benutzer.

    Es ist erstmal unerheblich für mich, ob der Benutzer seinen Highscore aufs maximum hochcheaten könnte. Für mich dient dieses Spiel nur als Übungsprogramm weil ich da eben sehr viele neue Sachen lernen kann. Und nun stellt sich mir erstmal die Frage für die Lösung eines solchen Benutzersystems.

    Die Spiellogik auf den Server auszulagern, das kommt irgendwann später nochmal dazu.

    Wenn dich das wirklich intressiert, solltest dich in die Cryptologie einlesen, also nicht die mathematischen Grundlagen sondern eher Hashes, synchrone und assynchrone verfahren, Key Austausch, ...
    Wenn das geschnallt hasst, ists recht einfach ne Crypto lib (libcrypto z.b.) zu verwenden, oder du nimmst was fertiges.

    Etwas in derart meinte ich. Dazu werd ich mir auf jedenfalls mehr Informationen suchen. Ich danke für den Tipp. 🙂

    Dass ich Passwörter nicht im Klartext in die DB schreibe ist mir bewusst gewesen. Danke trotzdem. 😃



  • Statt selbst etwas zusammenzufrickeln kannst du auch einfach auf https setzen. Netzwerklibs mit https gibts einige, zb cpp-netlib.
    Dann noch ein bisschen php drumherum und fertig 🙂
    Der client sendet seine logindaten zum server, welcher diese dann verifiziert. Dann können spielstanddaten etc abgeholt werden. Zum wiedererkennen des clients können http-cookies benutzt werden, php bietet dahingehend einfach zu bedienende funktionen an.


  • Mod

    roflo schrieb:

    Der client sendet seine logindaten zum server, welcher diese dann verifiziert. Dann können spielstanddaten etc abgeholt werden. Zum wiedererkennen des clients können http-cookies benutzt werden, php bietet dahingehend einfach zu bedienende funktionen an.

    Erst einmal sollte der Client aber sicher stellen, dass der Server auch wirklich der ist, für den er sich ausgibt.



  • Statt selbst etwas zusammenzufrickeln kannst du auch einfach auf https setzen

    oder SSL, wenn ständiges auf und abbauen der Verbindung Probleme bereitet (latenz, Leistungsverbrauch auf der cpu)

    Ciao ...



  • Der Client kann auch einfach nur legale Aktionen schicken. Statt "die Figur hat sich 100m nach links bewegt" schickt der Client einfach "User drückt linke Pfeiltaste".

    So umgeht man auch viele Probleme automatisch 🙂



  • Hab eine (fast)fertige Lösung gefunden, weiß nicht ich die Seite hier posten darf, deswegen lass ich es mal.
    Statt dem Umweg über PHP gibt es nun ein Loginscript in C++ direkt auf dem Server, das scheint auch zu funktionieren, der Client bekommt nur mitgeteilt ob die Daten verifiziert werden konnten oder nicht.

    Der Client kann auch einfach nur legale Aktionen schicken. Statt "die Figur hat sich 100m nach links bewegt" schickt der Client einfach "User drückt linke Pfeiltaste".

    Aber nehmen wir mal irgendein beliebiges MMORPG, dort würden die Spieler dann ja hunderte Informationen in kürzester Zeit an den Server senden. Wäre das nicht extrem aufwendig für den Server?


  • Mod

    DavidWebb schrieb:

    Aber nehmen wir mal irgendein beliebiges MMORPG, dort würden die Spieler dann ja hunderte Informationen in kürzester Zeit an den Server senden. Wäre das nicht extrem aufwendig für den Server?

    Ich glaube, du überschätzt das Datenvorkommen gewaltig. Ein normaler Mensch macht vielleicht 1-2 Aktionen pro Sekunde, wenn es hitzig wird. Ein extrem schneller Mensch eventuell auch mal 5. Oder sind das für dich schon hunderte Aktionen in kürzester Zeit?



  • Is die Frage ob er pro Spieler oder pro Shard/Instanz gemeint hat.

    @DavidWebb
    "Irgendein beliebiges MMORPG" ist lustig. Der Server von "irgendeinem beliebigen MMORPG" ist normalerweise nicht in PHP geschrieben. Und ich würde davon ausgehen dass da auch Leute dransitzen die genügend Erfahrung etc. haben. Ein paar hundert Requests pro Sekunde dürfen auf jeden Fall kein Problem sein. Nichtmal ein paar tausend. Also falls du insgesamt gemeint hast.

    Und falls du pro Spieler gemeint hast gilt natürlich das was SeppJ geschrieben hat.



  • SeppJ schrieb:

    DavidWebb schrieb:

    Aber nehmen wir mal irgendein beliebiges MMORPG, dort würden die Spieler dann ja hunderte Informationen in kürzester Zeit an den Server senden. Wäre das nicht extrem aufwendig für den Server?

    Ich glaube, du überschätzt das Datenvorkommen gewaltig. Ein normaler Mensch macht vielleicht 1-2 Aktionen pro Sekunde, wenn es hitzig wird. Ein extrem schneller Mensch eventuell auch mal 5. Oder sind das für dich schon hunderte Aktionen in kürzester Zeit?

    Ich hab früher auch solche Spiele gespielt und wenn ich daran so zurückdenke, dann habe ich schon im alltäglichen Situationen mehr Tasten gedrückt, im Player vs Player: i.d.R drückt man die Bewegungstasten, die Schlagtasten, Fertigkeitstasten, Tasten für verschiedene Potts usw. usw. und das alles ziemlich hektisch. Wenn ich alle diese Tastendrücke an den Server sende um sie zu validieren (z.B um einen Speedhack auszuschließen, zu überprüfen ob der Client seine bzw. die Fertigkeit überhaupt nutzen kann, ...) und das bei hunderten oder tausenden Spielern, ...?
    Dann kommt mir das ziemlich viel für einen Server vor - mag sein, dass ich mir da wirklich zu viel sorgen drum mache und sowas eigentlich kein Problem für so einen Server darstellen sollte, ich lass mich da gerne eines besseren belehren.

    Der Server von "irgendeinem beliebigen MMORPG" ist normalerweise nicht in PHP geschrieben.

    Dafür ist PHP ja auch nicht gedacht, falls Du auf meine Frage bzgl. Login mit PHP anspielst: Mir ging es nur um den Login an sich und wie gesagt: Mittlerweile habe ich das auch ber C++ direkt auf dem Server gelöst.


  • Mod

    DavidWebb schrieb:

    SeppJ schrieb:

    DavidWebb schrieb:

    Aber nehmen wir mal irgendein beliebiges MMORPG, dort würden die Spieler dann ja hunderte Informationen in kürzester Zeit an den Server senden. Wäre das nicht extrem aufwendig für den Server?

    Ich glaube, du überschätzt das Datenvorkommen gewaltig. Ein normaler Mensch macht vielleicht 1-2 Aktionen pro Sekunde, wenn es hitzig wird. Ein extrem schneller Mensch eventuell auch mal 5. Oder sind das für dich schon hunderte Aktionen in kürzester Zeit?

    Ich hab früher auch solche Spiele gespielt und wenn ich daran so zurückdenke, dann habe ich schon im alltäglichen Situationen mehr Tasten gedrückt, im Player vs Player: i.d.R drückt man die Bewegungstasten, die Schlagtasten, Fertigkeitstasten, Tasten für verschiedene Potts usw. usw. und das alles ziemlich hektisch. Wenn ich alle diese Tastendrücke an den Server sende um sie zu validieren (z.B um einen Speedhack auszuschließen, zu überprüfen ob der Client seine bzw. die Fertigkeit überhaupt nutzen kann, ...) und das bei hunderten oder tausenden Spielern, ...?
    Dann kommt mir das ziemlich viel für einen Server vor - mag sein, dass ich mir da wirklich zu viel sorgen drum mache und sowas eigentlich kein Problem für so einen Server darstellen sollte, ich lass mich da gerne eines besseren belehren.

    Wenn du regelmäßig mehr als 5 pro Sekunde schaffst, dann würde ich mich an deiner Stelle mal bei einem prominenten Esportsteam bewerben, vor dir liegt eine steile Karriere.

    Wie viele Leute sind denn so auf einem MMORPG-Server? Ein paar Tausend? Vielleicht sogar noch in Regionen unterteilt, so dass es nur ein paar Dutzend bis Hundert pro Region sind? Selbst mit tausenden von Spielern sind das immer noch nur tausende von Anfragen gleichzeitig. Das ist doch so gut wie nichts für einen Computer. Wie hustbaer schon sagte, wird ein MMORPG gewiss nicht in LAMP implementiert sein, sondern eine Softwarelösung ohne viel Overhead.

    Viel interessanter ist die Frage, wie der Server an tausend Spieler die nötigen Informationen über das Handeln der anderen 999 Spieler verschickt.



  • Naja, die meisten Spiele Clients die ich kenne, cachen extrem die daten ...
    d.h. man bewegt sich wie lokal, und parallel dazu werden die Daten versucht am Server zu synchronisieren.

    Falls das Synchronisieren mal fehlschlägt, kann der Client auch aktionen "zurucknehmen". Bei miesen Implementationen freut man sich dann immer über den GummiLeine Effekt ^^

    Denk mal das Clients heutzutage viel und auch dynamisch abfangen. bei ner guten verbindung wird viel und oft synchronsiert, bei ner schlechten eher weniger ^^

    Selbst mit tausenden von Spielern sind das immer noch nur tausende von Anfragen gleichzeitig. Das ist doch so gut wie nichts für einen Computer.

    Früher waren die Server geclustert (Zonen) ... also rechenleistung denk ich mal war schon bissi problemtatisch. Keine Ahnung wie es heutzutage ist.
    Wobei ich denk das eher das Netzwerktechnik und Verhalten problematisch ist ...
    1000 offene sockets sind schon nen Wort. Über verschluesselung brauch ma da nicht nachzudenken, über http auch ned ^^
    TCP wird sicher sportlich, denk der standard wird UDP sein, um Laufzeit daten zu übermitteln. Managment sicher weiterhin über tcp ...

    Aber wenn ich heutzutage manche Spiele sehe, glaube ich der Server läuft als App aufm handy vom manager ^^

    Ciao ....



  • RHBaum schrieb:

    1000 offene sockets sind schon nen Wort. Über verschluesselung brauch ma da nicht nachzudenken, über http auch ned ^^

    Sorry, aber viel mehr als ein herzliches LOL ist das nicht wert.

    1000 offene Connections schaffte sogar mein alter PC mit nem nicht übermässig professionell entwickelten Java Programm. Muss jetzt bald 10 Jahre her sein. Daneben hab' ich noch ganz normal gesurft, entwickelt - nix davon zu bemerken.



  • RHBaum schrieb:

    TCP wird sicher sportlich, denk der standard wird UDP sein, um Laufzeit daten zu übermitteln. Managment sicher weiterhin über tcp ...

    TCP ist nur doof wegen der Latenz.



  • Um es für mich kurz und verständlich zu machen:

    Ich muss mir also keine Sorgen um "zu viele" Daten machen, so n Server steckt das locker flockig weg?

    TCP ist nur doof wegen der Latenz.

    Benutzt man TCP nicht eh nur bei wichtigen Daten?
    Also um auf das Beispiel mit den gedrückten Tasten zu kommen: Wenn dort eine Information verloren geht, wäre es nicht sooo schlimm, also würde ich dort UDP verwenden, wohingegen ich beim Login TCP verwenden würde? Oder hab ich das falsch verstanden mit den Protokollen?



  • DavidWebb schrieb:

    Um es für mich kurz und verständlich zu machen:

    Ich muss mir also keine Sorgen um "zu viele" Daten machen, so n Server steckt das locker flockig weg?

    Du kannst auch easy einen Server schreiben der bei 2 parallelen Requests ein geht.

    Aber prinzipiell halten Server deutlich mehr aus als die Leute hier scheinbar glauben. Zuerst Implementieren und dann wirst du schon merken ob es zu langsam ist. Aber prinzipiell gibt es da nur sehr wenige Probleme. Wie sollten sonst Services wie Twitch, Facebook, WoW, etc. funktionieren??

    TCP ist nur doof wegen der Latenz.

    Benutzt man TCP nicht eh nur bei wichtigen Daten?

    TCP garantiert dir das Daten ankommen. Auf kosten von mehr Daten aber viel wichtiger: auf Kosten von Latenz.

    Wenn du ein UDP Protokoll schreibst, dann brauchst du eben einen Mechanismus der mit verlorenen Daten klar kommt. zB indem er sie erneut anfordert, etc.

    Wenn der Server eine Cutscene triggert muss er ja auch bei UDP garantieren dass der Client das mitbekommen hat...



  • Aber prinzipiell halten Server deutlich mehr aus als die Leute hier scheinbar glauben.

    zu viele Leute denke aber auch leider das ihre paar Verbindungen die sie mal in irgendeinem Programm problemlos gehandelt haben was mit Skalierbarkeit zu tun hatte

    Twitch, Facebook, WoW, etc. funktionieren??

    das sind alles Technologie-Vorreiter die in allen diesen Bereichen an Verbesserungen des TCP/IP-Protokoll selbst oder den Stacks der Betriebssystem arbeiten, deren Skalierbarkeit hier in irgendeiner Form mit Standard-TCP/IP Behandlung in einen Topf zu werfen ist wie wenn ein Trabbi-Entwickler meint er könnte auch problemlos einen Porsche bauen (sind ja beides nur Autos)



  • Klar sind das Vorreiter (von WoW mal abgesehen) aber das ist doch der Punkt. Easy Peasy ein paar Tausend Leute.

    Die Ansätze sind hier einfach komplett falsch: Über 10.000 Leute mache ich mir keinen Kopf. Sowas kann man selbst bei dem dümmsten System der Welt easy mit Hardware erschlagen.



  • Easy Peasy ein paar Tausend Leute.

    wie kommst du auf Easy Peasy?

    http://www.datacenterknowledge.com/archives/2009/11/25/wows-back-end-10-data-centers-75000-cores/

    das ist absolut alles andere als Easy Peasy - und ich denke die wenigsten bekommen nur einen Chat-Server hin der 10000 aktive Teilnehmer schluckt


Anmelden zum Antworten