Spieler in MMO-Spielen können normalerweise Nachrichten über verschiedene Kanäle senden (privat, öffentlich, Gilden usw.).
Wie würde ich diese Daten übertragen und speichern, um zu verhindern, dass externe Benutzer auf private Chat-Nachrichten von jemandem zugreifen können? Soll ich die Daten in einem temporären Spielprotokoll oder einer Datenbank speichern?
Antworten:
Sie werden einer externen Partei niemals wirklich die Möglichkeit nehmen, Chat-Pakete von Clients abzufangen, und Sie sollten sich nicht zu viele Sorgen machen, denn wenn Sie ein MMO erstellen, erstellen Sie ein Spiel, keine industrielle Stärke krypographisch sichere Chat-Plattform.
Sie sollten Chat-Nachrichten wie folgt implementieren:
Der am stärksten gefährdete Punkt ist hier die anfängliche Client-zu-Server-Übertragung. Wenn jemand diese Pakete abfing, konnte er Nachrichten sehen, die technisch nicht für ihn bestimmt waren. Sie könnten die Daten verschlüsseln, aber das ist ein großer Aufwand für nur minimalen Gewinn. Der Client muss in der Lage sein, Chat-Pakete eventuell zu entschlüsseln, und das Abfangen der Pakete beim Verlassen des Clients ist der beste Ort, um das oben genannte Snooping durchzuführen. Daher ist der Schlüssel für den Snooper bereits verfügbar, nur etwas schwieriger zu finden.
Es ist jedoch sehr wichtig, dass Sie Ihren Chat über einen Server weiterleiten, über den Sie die Kontrolle haben. Es muss nicht der Spieleserver sein, es kann ein dedizierter Server für den Trichter-Chat sein, aber Sie möchten das Routing steuern. Sie haben die Möglichkeit, GM-Streitigkeiten zu überwachen, Benutzeranforderungen zum Blockieren oder Stummschalten anderer Benutzer zu erzwingen, Probleme zu lösen, die bei NAT-Punching oder anderen Netzwerk-Spielereien auftreten können, wenn Sie versuchen, Peer-to-Peer-Chat durchzuführen, und Es bietet genug Hindernisse für gelegentliches Hacken (für das Peer-to-Peer-Chat anfällig ist), um 90% der Sicherheitsbedenken zu lösen. Welches ist ungefähr so gut wie Sie bekommen.
quelle
Ich bin mir ehrlich gesagt nicht 100% sicher, was Sie fragen. Aber hoffentlich ist das Folgende hilfreich.
Wenn Sie sich mit Planeshift , einem Open-Source-MMO, befassen , können Sie sich den Code ansehen und sehen, wie sie beschlossen haben, ihr System zu entwickeln. Dies gibt Ihnen keinen genauen Einblick in alle MMOs, aber höchstwahrscheinlich sind die Implementierungen in verschiedenen Spielen ähnlich.
Hier finden Sie einige Anweisungen zum Herunterladen der Quelle. Sie müssen es über SVN auschecken
Ich habe einen Blick darauf
src/client/gui/
geworfen und wenn Sie hineingehen, sehen Sie eine ChatWindow-Klasse. Es kümmert sich um das Zurücksenden von Nachrichten an den Server und den vierten zum Chatten an den Server und kümmert sich auch um den Eingabeverlauf. Es sieht so aus, als würden sie Informationen verpacken und zur Übermittlung an den Server senden. Ich stelle mir also vor, dass diese Chat-Informationen auf ihrem Server gespeichert sind und daher nicht für jedermann erreichbar sind. Dies gilt nur, wenn Sie in die Serverdatenbank gelangen können, um auf Chat-Datensätze zuzugreifen. Ich kann mir nicht vorstellen, dass sie auch alles behalten können. Wenn sie Chat-Protokolle führen, ist dies wahrscheinlich nur für eine bestimmte Zeit (vielleicht ein paar Tage?)Wie auch immer, eine breite Antwort auf eine breite Frage. Ohne eine gezieltere Frage kann ich es nicht viel besser machen. Fühlen Sie sich frei zu kommentieren, wenn Sie engere Fragen haben und ich versuchen kann, sie zu beantworten.
Edit1: Beachten Sie auch, dass Sie im Client-Ordner eine Klasse finden und authentifizieren können. Dies behandelt die Clientauthentifizierung usw. Ich kann mir vorstellen, dass es auch die Chat-bezogene Sicherheit in Bezug auf die Authentifizierung bei einem Chat-Server behandelt. Sie haben möglicherweise keine dedizierten Server für den Chat. Es könnte also nur der Spieleserver sein, der auch Chat-Dienste für alle seine Clients ausführt. Dies können Sie herausfinden, indem Sie den Code wirklich studieren.
Für größere MMOs würde ich Geld dafür investieren, dass sie dedizierte Chat-Server haben, nur um sich um das Chatten zwischen Spielern zu kümmern. (Genau wie zum Beispiel).
quelle
Die meisten MMOs, die ich gespielt habe, speichern keine Nachrichten über einen längeren Zeitraum. Denn das würde sie höchstwahrscheinlich zu einer GameCompany mit einem negativen Abzeichen wie der NSA machen. Es sei denn, die Spieler hatten direkten Zugriff auf ihre Datenbank.
Runescape hat die Nachrichten im Cache gespeichert und ist nur für eine kurze Zeit verfügbar. Ich habe noch nie von jemandem gehört, der aufgrund der Tatsache, dass solche Daten gespeichert wurden, gesperrt wurde. Sollte man jemals ein anderes Stück für das melden, was er gesagt hat? Er muss schnell sein, bis sein Chat-Limit von 500 Zeilen aufgebraucht ist. Nach dieser Zeit werden alle seine Nachrichten gelöscht. An dem überfüllten Ort, an dem sich die Spieler gegenseitig anschreien, sind es bis zu 10 Sekunden.
Die Nachrichten werden immer über den Server gesendet, und die Speicherung erfolgt auf dem Server, nicht auf dem Client. Andernfalls könnte Spieler A, der sich in den Client gehackt hat, das für den Chat verantwortliche Array manipulieren und buchstäblich schreiben, dass SPIELER B etwas anderes geschrieben hat. Nach kurzer Zeit konnte er diesen Spieler melden, weil er etwas geschrieben hatte, und der Cache der anderen Spieler enthielt möglicherweise keine solchen Informationen mehr.
Wenn Sie die Nachrichten auf dem CLIENT speichern, was über ein Chat-Portal GaduGadu.pl geschehen ist, verlieren die Benutzer die Möglichkeit, ihre Chats auf verschiedenen PCs zu überprüfen. Die vom Benutzer generierten Daten wären für Dritte anfällig. Meist in öffentlichen Internetcafés. Oder bei Freunden, die sich an seinem ehemaligen Freund rächen könnten.
Wenn Sie es auf Ihrem Server speichern, kann Spieler B nicht auf Daten von Spieler A zugreifen und umgekehrt. Denken Sie daran, dass die Aussage "Kann Spieler B auf diese Daten zugreifen" eine weit gefasste Frage ist. Sie können nie feststellen, ob die Daten sicher sind, es sei denn, Ihr Server ist offline! Hier ist ein Beispiel.
quelle
Das Speichern von Nachrichten wird nur für die Zustellung benötigt, wenn Sie sie zu einem späteren Zeitpunkt übermitteln möchten. Zum Beispiel, wenn Sie zulassen möchten, dass Benutzer Nachrichten an Spieler senden, die offline sind und bei der nächsten Anmeldung zugestellt werden, oder wenn Sie einem Administrator erlauben möchten, den Chat zu einem späteren Zeitpunkt zu lesen.
Wenn Sie dies nicht benötigen, kann und sollte die Chat-Bearbeitung vollständig im Arbeitsspeicher erfolgen.
Jede Chat-Nachricht, die ein Client sendet, muss einige Informationen über den Empfänger enthalten (öffentliche, Gilden-, private Nachricht an Spieler X). Der Server sollte dann die Zeichen bestimmen, die die Nachricht lesen dürfen:
Die Nachricht sollte dann an die Clients gesendet werden, die diese Zeichen steuern.
Das Senden einer Nachricht an einen Client, der sie dem Benutzer nicht anzeigen soll, ist eine Verschwendung von Datenverkehr und ein Verstoß gegen das Prinzip "Niemals dem Client vertrauen".
quelle