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?
Réponses:
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 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.
la source
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).
la source
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.
la source
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:
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".
la source