Comment le chat doit-il être transmis et stocké dans un MMO?


8

Les joueurs dans les jeux MMO peuvent généralement envoyer des messages sur différents canaux (privés, publics, guildes, etc.).

Comment pourrais-je transmettre et stocker ces données afin d'empêcher les utilisateurs extérieurs d'accéder aux messages de chat privé de quelqu'un? Dois-je stocker les données dans un journal de jeu temporaire ou dans une base de données?


3
Demander «comment font les MMO» est trop large et nécessite des connaissances internes pour répondre avec conviction. J'ai ajusté votre question pour vous concentrer davantage sur la façon dont vous devez implémenter le chat pour votre projet, dans le but de préserver la sécurité autant que possible.

Réponses:


13

Vous ne supprimerez jamais vraiment la possibilité pour une partie extérieure d'intercepter les paquets de chat des clients, et ne vous inquiétez pas trop, car lorsque vous créez un MMO, vous construisez un jeu, pas une force industrielle plate-forme de chat sécurisée de manière cryptographique.

Vous devez implémenter les messages de chat comme suit:

  • Le client transmet les données de discussion, qui incluent au minimum le message de discussion mais incluent probablement également des informations sur le canal ou le groupe (telles que la discussion publique, la discussion de guilde, le chuchotement de joueur à joueur, etc.).
  • Le serveur obtient les données de discussion. Tout d'abord, il l'enregistre, probablement quelque part hors ligne car il n'est pas nécessaire de le garder en mémoire plus longtemps que nécessaire. La journalisation est importante et souvent négligée, mais elle est incroyablement utile pour l'arbitrage GM et les diagnostics médico-légaux. Lorsque vous exécutez un MMO, vous souhaitez tout enregistrer .
  • Une fois les données enregistrées, le serveur détermine qui doit recevoir le message de discussion et le diffuse de manière appropriée. Le serveur peut ensuite déposer les données restantes sur le sol; il n'en a plus besoin.

Le point le plus vulnérable ici est la transmission initiale client-serveur. Si quelqu'un espionne ces paquets, il peut voir des messages qui ne leur sont pas destinés techniquement. Vous pouvez crypter les données, mais cela demande beaucoup d'efforts pour un gain minimal. Le client doit être en mesure de déchiffrer les paquets de discussion à terme, et intercepter les paquets lorsqu'ils quittent le client serait le meilleur endroit pour effectuer l'espionnage susmentionné, de sorte que la clé est déjà disponible pour le snooper, juste un peu plus difficile à trouver.

Il est très important que vous passiez votre discussion via un serveur dont vous avez le contrôle. Il n'est pas nécessaire qu'il s'agisse du serveur de jeu, il peut s'agir d'un serveur dédié pour canaliser le chat, mais vous souhaitez contrôler le routage. Il vous permet de superviser les litiges GM, il vous permet d'appliquer les demandes des utilisateurs pour bloquer ou désactiver les autres utilisateurs, il résout les problèmes que vous pourriez avoir avec le poinçonnage NAT ou d'autres manigances de réseau que vous pouvez avoir en essayant de faire du chat peer-to-peer, et il fournit suffisamment d'obstacles au piratage occasionnel (auquel le chat peer-to-peer est sujet) pour résoudre 90% des problèmes de sécurité. Ce qui est à peu près aussi bon que vous obtiendrez.


Est-ce que l'utilisation de HTTPS fonctionnerait? Vraisemblablement, les messages de chat ne sont pas aussi critiques pour la latence que le reste du jeu et pourraient donc être envoyés et reçus via HTTPS (par exemple à l'aide de WebSockets) en utilisant un mécanisme distinct des autres paquets liés au jeu.
Justin

1
Vous pouvez le faire fonctionner, mais je ne vois pas pourquoi il serait utile d'implémenter ce canal latéral supplémentaire, en particulier lorsque vous souhaitez toujours que certains messages de discussion soient traités par le serveur de jeu pour d'autres raisons (peut-être que ce sont en fait des commandes slash , ils contiennent peut-être une sorte d'élément reliant le balisage, et cetera). C'est une option cependant.

2

Honnêtement, je ne suis pas sûr à 100% de ce que vous demandez. Mais j'espère que ce qui suit est utile.

Si vous étudiez Planeshift , un MMO open-source, vous pouvez consulter leur code et voir comment ils ont décidé d'architecturer leur système. Cela ne vous donnera pas un aperçu exact de tous les MMO, mais les implémentations les plus probables sont similaires dans différents jeux.

Voici quelques instructions pour télécharger leur source. Vous devrez le vérifier via SVN

J'ai jeté un coup d'œil et si vous allez dans, src/client/gui/vous verrez une classe ChatWindow. Il prend en charge l'envoi de messages en arrière et quatrième au serveur pour discuter et il prend également en charge l'historique des entrées. Il semble qu'ils emballent les informations et les envoient au serveur pour qu'elles les livrent. J'imagine donc que ces informations de chat sont stockées sur leur serveur et donc inaccessibles à tout le monde. C'est à moins que vous ne puissiez accéder à la base de données des serveurs pour accéder aux enregistrements de discussion. Je ne peux pas imaginer qu'ils soient capables de tout garder non plus. S'ils tiennent des journaux de discussion, ce n'est probablement que pendant un certain temps (quelques jours peut-être?)

Quoi qu'il en soit, une réponse large pour une question large. Je ne peux pas vraiment faire mieux que ça sans une question plus ciblée. N'hésitez pas à commenter si vous avez des questions plus étroites et je peux essayer d'y répondre.

Edit1: Notez également que dans le dossier client, vous pouvez rechercher et authentclient classe. Cela gère l'authentification du client, etc. J'imagine qu'il gérera également la sécurité liée au chat en termes d'authentification sur un serveur de chat. Ils peuvent ne pas avoir de serveurs dédiés pour le chat. Il pourrait donc simplement s'agir du serveur de jeu qui exécute également des services de chat pour tous ses clients. C'est quelque chose que vous pourriez comprendre en étudiant vraiment le code.

Pour les plus gros MMO, je mettrais de l'argent sur eux en ayant des serveurs de chat dédiés juste pour prendre soin de discuter entre les joueurs. (Tout comme ils le font par exemple).


1

La plupart des MMO que j'ai joués ne stockent pas les messages pendant une plus longue période. Parce que cela les transformerait très probablement en une GameCompany avec un badge négatif comme la NSA. Sauf si les joueurs avaient un accès direct à leur base de données.

Runescape a les messages stockés dans le cache, et il n'est disponible que pour une petite quantité de temps. Je n'ai jamais entendu parler de l'interdiction de personne en raison du stockage de ces données. Si jamais on devait rapporter une autre pièce pour ce qu'il a dit. Il doit être rapide, jusqu'à ce que sa limite de chat de 500 lignes soit épuisée. Passé ce délai, tous ses messages seront supprimés. Dans l'endroit le plus fréquenté, où les joueurs se crient, c'est jusqu'à 10 secondes.

Les messages sont toujours envoyés via le serveur et le stockage a lieu sur le serveur et non sur le client. Sinon, le joueur A qui a piraté le client pourrait manipuler le tableau responsable du chat et écrire littéralement que le JOUEUR B a écrit autre chose. Après un court instant, il pouvait signaler que ce joueur avait écrit quelque chose et le cache des autres joueurs pourrait ne plus contenir de telles informations.

Si vous stockez les messages sur le CLIENT, ce qui a été fait par un portail de chat GaduGadu.pl, les utilisateurs perdront la possibilité de vérifier leurs chats sur différents PC. Les données générées par l'utilisateur seraient vulnérables à des tiers. Surtout dans les cafés Internet publics. Ou chez des amis qui pourraient se venger de son ancien ami.

Si vous le stockez sur votre serveur, il est impossible pour le joueur B d'accéder aux données du joueur A et vice versa. Gardez à l'esprit que dire "le joueur B peut-il accéder à ces données" est une question générale. Vous ne pouvez jamais dire si les données sont en sécurité, sauf si votre serveur est hors ligne! Voici un exemple.


0

Le stockage des messages n'est nécessaire pour la remise que lorsque vous souhaitez les remettre ultérieurement. Par exemple, lorsque vous souhaitez autoriser des personnes à envoyer des messages à des joueurs hors ligne qui sont remis la prochaine fois qu'ils se connectent ou lorsque vous souhaitez autoriser un administrateur à lire le chat ultérieurement.

Lorsque vous n'en avez pas besoin, la gestion du chat peut et doit être effectuée entièrement en mémoire.

Chaque message de chat qu'un client envoie doit inclure des informations sur le destinataire (public, guilde, message privé au joueur X). Le serveur doit alors déterminer les caractères autorisés à lire le message:

  • Pour les messages publics, ce sont les caractères dans un rayon spécifique autour du caractère d'envoi
  • Pour les messages de guilde, ce sont les personnages qui ont la même guilde que l'expéditeur qui sont actuellement en ligne
  • Pour les messages privés, c'est le personnage du même nom, quand il est en ligne

Le message doit ensuite être envoyé aux clients qui contrôlent ces caractères.

L'envoi d'un message à un client qui n'est pas censé le montrer à l'utilisateur est une perte de trafic et une violation du principe "ne jamais faire confiance au client".


1
Une telle approche supprime la possibilité pour les administrateurs du jeu de consulter les journaux de discussion à une date ultérieure pour arbitrer les différends et traiter les plaintes d'abus. Cela peut donc être efficace, mais en tant qu'administrateur MMO, ce n'est probablement pas ce que vous voulez. Tous les chats doivent être enregistrés et conservés en toute sécurité, au moins pendant une période prédéfinie avant d'être archivés / purgés.
MrCranky

Je suis d'accord avec ce que vous dites à propos de ne pas l'envoyer à des clients qui ne devraient pas être autorisés à le lire cependant; le filtrage doit être effectué côté serveur.
MrCranky

@MrCranky Lorsque vous voulez vraiment enregistrer un chat privé - ce qui pourrait enfreindre les lois sur la confidentialité dans certains pays sous certaines conditions - vous pouvez toujours le connecter à un fichier ou une base de données, mais cela n'a aucun rapport avec la personne à qui vous l'envoyez. Réponse mise à jour, cependant.
Philipp

1
Ce n'est pas privé si vous l'envoyez au serveur de jeu, et le CLUF devrait toujours le préciser. Je ne pense pas que vous trouverez des MMO là-bas qui prétendent le contraire. Il n'y a aucune interaction privée lorsque le joueur utilise le jeu comme intermédiaire; ce n'est pas une expérience de chat entre pairs, ils interagissent avec le jeu.
MrCranky

1
Il n'y a aucune attente de confidentialité dans un jeu en ligne, les lois ne fonctionnent pas de cette façon.
Patrick Hughes
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.