Como o chat deve ser transmitido e armazenado em um MMO?


8

Jogadores em jogos MMO geralmente podem enviar mensagens por diferentes canais (privado, público, guildas etc.).

Como transmitir e armazenar esses dados para impedir que usuários externos possam acessar mensagens de bate-papo privadas de alguém? Devo armazenar os dados em um log de jogo temporário ou em um banco de dados?


3
Perguntar "como os MMOs fazem isso" é muito amplo e requer conhecimento interno para responder com convicção. Ajustei sua pergunta para focar mais em como você deve implementar o bate-papo para seu projeto, com o objetivo de preservar a segurança o máximo possível.

Respostas:


13

Você nunca vai realmente remover a capacidade de uma parte externa interceptar pacotes de bate-papo dos clientes e não deve se preocupar muito, porque quando você está criando um MMO, está criando um jogo, não uma força industrial plataforma de bate-papo criptograficamente segura.

Você deve implementar mensagens de bate-papo da seguinte maneira:

  • O cliente transmite os dados do bate-papo, o que inclui no mínimo a mensagem de bate-papo, mas provavelmente também inclui informações de canal ou grupo (como bate-papo público, bate-papo da guilda, sussurro de jogador para jogador etc.).
  • O servidor obtém os dados do bate-papo. Primeiro, ele o registra, provavelmente em algum lugar offline, porque não há necessidade de mantê-lo residente na memória por mais tempo do que o necessário. O registro é importante e muitas vezes esquecido, mas é incrivelmente útil para arbitragem GM e diagnóstico forense. Quando você executa um MMO, deseja registrar tudo .
  • Depois que os dados são registrados, o servidor determina quem deve receber a mensagem de bate-papo e a transmite adequadamente. O servidor pode então soltar os dados restantes no chão; não precisa mais.

O ponto mais vulnerável aqui é a transmissão inicial de cliente para servidor. Se alguém espionasse esses pacotes, eles poderiam ver mensagens tecnicamente não destinadas a eles. Você pode criptografar os dados, mas isso é muito esforço para obter um ganho mínimo. O cliente deve ser capaz de descriptografar os pacotes de bate-papo eventualmente, e interceptar os pacotes à medida que eles saem do cliente seria o melhor lugar para fazer a espionagem acima mencionada, para que a chave já esteja disponível para o espião, apenas um pouco mais difícil de encontrar.

É muito importante que você passe seu bate-papo através de um servidor que você está no controle. Ele não precisa ser o servidor do jogo, pode ser um servidor dedicado para canalizar o bate-papo, mas você deseja controlar o roteamento. Permite supervisionar disputas de GM, permite impor solicitações de usuários para bloquear ou silenciar outros usuários, resolver os problemas que você possa ter com o soco de NAT ou outras travessuras de rede que você pode ter tentando fazer bate-papo ponto a ponto e fornece uma barreira suficiente para hackers casuais (para os quais o bate-papo ponto a ponto é propenso) para resolver 90% das preocupações de segurança. O que é tão bom quanto você conseguirá.


Usar HTTPS funcionaria? Presumivelmente, as mensagens de bate-papo não são tão críticas quanto à latência que o resto do jogo e, portanto, podem ser enviadas e recebidas via HTTPS (por exemplo, usando WebSockets) usando um mecanismo separado de outros pacotes relacionados ao jogo.
Justin

11
Você poderia fazê-lo funcionar, mas não vejo por que vale a pena implementar esse canal lateral adicional, especialmente quando você ainda pode querer que algumas mensagens de bate-papo sejam processadas pelo servidor do jogo por outros motivos (talvez sejam realmente comandos de barra) , talvez eles contenham algum tipo de item vinculando marcação etc.). É uma opção embora.

2

Sinceramente, não tenho 100% de certeza do que você está perguntando. Mas espero que o seguinte seja útil.

Se você olhar para a mudança de planeamento , um MMO de código aberto, poderá ver o código deles e ver como eles decidiram arquitetar seu sistema. Isso não fornecerá uma visão exata de todos os MMOs, mas as implementações mais prováveis ​​são semelhantes em diferentes jogos.

Aqui estão algumas instruções para baixar sua fonte. Você precisará conferir via SVN

Dei uma olhada e, se você entrar src/client/gui/, verá uma classe ChatWindow. Ele cuida do envio de mensagens de volta para o servidor e para o quarto para conversar e também para o histórico de entrada. Parece que eles empacotam informações e as enviam para o servidor para entrega. Então, imagino que essas informações de bate-papo sejam armazenadas em seu servidor e, portanto, não sejam acessíveis a ninguém. Isto é, a menos que você consiga acessar o banco de dados dos servidores para acessar os registros de bate-papo. Eu também não consigo imaginar eles sendo capazes de manter tudo. Se eles mantiverem os registros de bate-papo, provavelmente será apenas por um certo período de tempo (alguns dias, talvez?)

De qualquer forma, uma resposta ampla para uma pergunta ampla. Eu realmente não posso fazer muito melhor do que isso sem uma pergunta mais focada. Sinta-se à vontade para comentar se você tiver perguntas mais restritas e eu puder tentar respondê-las.

Edit1: Observe também que, na pasta do cliente, você pode encontrar e autentclient class. Isso lida com a autenticação do cliente, etc. Imagino que ele também lide com a segurança relacionada ao bate-papo em termos de autenticação em um servidor de bate-papo. Eles podem não ter servidores dedicados para bate-papo. Portanto, poderia ser apenas o servidor do jogo que também está executando serviços de bate-papo para todos os seus clientes. Isso é algo que você pode descobrir realmente estudando o código.

Para MMO maiores, eu colocaria dinheiro neles tendo servidores de bate-papo dedicados apenas para cuidar das conversas entre jogadores. (Assim como eles fazem em instâncias).


1

A maioria dos MMOs que joguei não armazena mensagens por um longo período de tempo. Porque isso provavelmente os transformaria em uma GameCompany com um emblema negativo como a NSA. A menos que os jogadores tivessem acesso direto ao banco de dados.

O Runescape possui as mensagens armazenadas em cache e está disponível apenas por um pequeno período de tempo. Eu nunca ouvi falar de alguém ser banido devido ao fato de que esses dados foram armazenados. Se alguém deveria relatar outra peça pelo que ele disse. Ele precisa ser rápido, até que seu limite de bate-papo de 500 ~ se esgote. Após esse período, todas as suas mensagens serão excluídas. No local mais movimentado, onde os jogadores gritam um com o outro, leva até 10 segundos.

As mensagens são sempre enviadas via servidor e o armazenamento ocorre no servidor, não no cliente. Caso contrário, o jogador A que invadisse o cliente seria capaz de manipular a matriz responsável pelo bate-papo e escrever literalmente que o PLAYER B escreveu outra coisa. Depois de um tempo, ele poderia denunciar esse jogador por escrever algo e os outros jogadores em cache podem não conter mais essas informações.

Se você armazenar as mensagens no CLIENTE, o que foi feito por um portal de bate-papo GaduGadu.pl, os usuários perderão a capacidade de verificar suas conversas em computadores diferentes. Os dados gerados pelo usuário seriam vulneráveis ​​a terceiros. Principalmente em cafés públicos da Internet. Ou na casa de amigos que possam buscar vingança em seu ex-amigo.

Se você armazená-lo em seu servidor, é impossível para o Jogador B acessar os dados do Jogador A e vice-versa. Lembre-se de que dizer "o jogador B pode acessar esses dados" é uma questão ampla. Você nunca pode dizer se os dados estão seguros, a menos que seu servidor esteja offline! Aqui está um exemplo.


0

O armazenamento de mensagens é necessário apenas para entrega quando você deseja entregá-las posteriormente. Por exemplo, quando você deseja permitir que as pessoas enviem mensagens para jogadores offline, que são entregues na próxima vez em que fazem login ou quando você deseja permitir que um administrador leia o bate-papo posteriormente.

Quando você não precisa disso, o tratamento de bate-papo pode e deve ser feito completamente na memória.

Cada mensagem de bate-papo que um cliente envia deve incluir algumas informações sobre o destinatário (público, guilda, mensagem privada para o jogador X). O servidor deve determinar os caracteres que têm permissão para ler a mensagem:

  • Para mensagens públicas, esses são os caracteres em um raio específico ao redor do caractere de envio
  • Para mensagens da guilda, esses são os personagens que têm a mesma guilda que o remetente que está atualmente online
  • Para mensagens privadas, é o caractere com o mesmo nome, quando está online

A mensagem deve ser enviada aos clientes que controlam esses caracteres.

O envio de uma mensagem para um cliente que não deve ser mostrada ao usuário é um desperdício de tráfego e uma violação do princípio "nunca confie no cliente".


11
Essa abordagem remove a capacidade de os administradores do jogo revisarem os logs de bate-papo posteriormente para arbitrar disputas e lidar com reclamações de abuso. Portanto, pode ser eficiente, mas como administrador do MMO, provavelmente não é o que você deseja. Todo o bate-papo deve ser registrado e mantido em segurança, pelo menos por um período de tempo predefinido antes de ser arquivado / eliminado.
precisa saber é o seguinte

Eu concordo com o que você diz sobre não enviá-lo para clientes que não deveriam poder lê-lo; a filtragem deve ser feita no servidor.
precisa saber é o seguinte

@MrCranky Quando você realmente deseja registrar um bate-papo privado - o que pode violar as leis de privacidade em alguns países sob algumas condições - você ainda pode registrá-lo em algum arquivo ou banco de dados, mas isso não tem relação com quem você o envia. Resposta atualizada, no entanto.
Philipp

11
Não é particular se você estiver enviando para o servidor do jogo, e o EULA sempre deve deixar isso claro. Eu não acho que você encontrará MMOs por aí que fingem o contrário. Não há interações privadas quando o jogador está usando o jogo como intermediário; não é uma experiência de bate-papo ponto a ponto, eles estão interagindo com o jogo.
precisa saber é o seguinte

11
Não há expectativa de privacidade em um jogo online, as leis não funcionam dessa maneira.
Patrick Hughes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.