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?
Respostas:
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 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á.
fonte
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).
fonte
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.
fonte
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:
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".
fonte