Wie soll Chat übertragen und in einem MMO gespeichert werden?


8

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?


3
Die Frage "Wie machen MMOs das?" Ist zu weit gefasst und erfordert Insiderwissen, um mit Überzeugung zu antworten. Ich habe Ihre Frage angepasst, um mich mehr darauf zu konzentrieren, wie Sie den Chat für Ihr Projekt implementieren sollten, um die Sicherheit so weit wie möglich zu gewährleisten.

Antworten:


13

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 Client überträgt die Chat-Daten, die mindestens die Chat-Nachricht enthalten, aber wahrscheinlich auch Kanal- oder Gruppeninformationen (wie öffentlicher Chat, Gilden-Chat, Flüstern von Spieler zu Spieler usw.).
  • Der Server erhält die Chatdaten. Zuerst wird es protokolliert, wahrscheinlich irgendwo offline, da es nicht länger als nötig im Speicher verbleiben muss. Die Protokollierung ist wichtig und wird oft übersehen, ist jedoch für die GM-Schiedsgerichtsbarkeit und die forensische Diagnose unglaublich nützlich. Wenn Sie ein MMO ausführen, möchten Sie alles protokollieren .
  • Sobald die Daten protokolliert wurden, bestimmt der Server, wer die Chat-Nachricht erhalten soll, und sendet sie entsprechend. Der Server kann dann die verbleibenden Daten auf dem Boden ablegen. es braucht es nicht mehr.

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.


Würde die Verwendung von HTTPS funktionieren? Vermutlich sind Chat-Nachrichten nicht so latenzkritisch wie der Rest des Spiels und können daher über HTTPS (z. B. mithilfe von WebSockets) mithilfe eines von anderen spielbezogenen Paketen getrennten Mechanismus gesendet und empfangen werden.
Justin

1
Sie könnten es zum Laufen bringen, aber ich verstehe nicht, warum es sich lohnen würde, diesen zusätzlichen Seitenkanal zu implementieren, insbesondere wenn Sie möchten, dass einige Chat-Nachrichten aus anderen Gründen vom Spielserver verarbeitet werden (möglicherweise handelt es sich tatsächlich um Schrägstriche) , vielleicht enthalten sie eine Art Elementverknüpfungs-Markup usw.). Es ist jedoch eine Option.

2

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).


1

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.


0

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:

  • Bei öffentlichen Nachrichten sind dies die Zeichen in einem bestimmten Radius um das sendende Zeichen
  • Bei Gildennachrichten sind dies die Charaktere, die dieselbe Gilde haben wie der Absender, der gerade online ist
  • Bei privaten Nachrichten ist es das gleichnamige Zeichen, wenn es online ist

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".


1
Durch einen solchen Ansatz können die Spieladministratoren die Chat-Protokolle zu einem späteren Zeitpunkt nicht mehr überprüfen, um Streitigkeiten zu schlichten und Missbrauchsbeschwerden zu bearbeiten. Es mag also effizient sein, aber als MMO-Administrator ist es wahrscheinlich nicht das, was Sie wollen. Alle Chats sollten protokolliert und sicher gehalten werden, zumindest für einen vordefinierten Zeitraum, bevor sie archiviert / gelöscht werden.
MrCranky

Ich stimme dem zu, was Sie darüber sagen, dass Sie es nicht an Kunden senden, die es jedoch nicht lesen dürfen. Die Filterung sollte serverseitig erfolgen.
MrCranky

@MrCranky Wenn Sie wirklich einen privaten Chat protokollieren möchten, der unter bestimmten Bedingungen in einigen Ländern gegen die Datenschutzgesetze verstoßen kann, können Sie ihn weiterhin in einer Datei oder Datenbank protokollieren. Dies hängt jedoch nicht davon ab, an wen Sie ihn senden. Antwort jedoch aktualisiert.
Philipp

1
Es ist nicht privat, wenn Sie es an den Spieleserver senden, und die EULA sollte dies immer klarstellen. Ich glaube nicht, dass Sie MMOs finden werden, die etwas anderes vorgeben. Es gibt keine privaten Interaktionen, wenn der Spieler das Spiel als Vermittler verwendet. Dies ist keine Peer-to-Peer-Chat-Erfahrung, sie interagieren mit dem Spiel.
MrCranky

1
In einem Online-Spiel wird keine Privatsphäre erwartet, Gesetze funktionieren nicht so.
Patrick Hughes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.