Los jugadores en los juegos MMO generalmente pueden enviar mensajes a través de diferentes canales (privados, públicos, gremios, etc.).
¿Cómo transmitiría y almacenaría estos datos para evitar que usuarios externos puedan acceder a los mensajes de chat privados de alguien? ¿Debo almacenar los datos en un registro de juego temporal o en una base de datos?
Respuestas:
Nunca eliminarás realmente la capacidad de una parte externa de interceptar paquetes de chat de los clientes, y no debes preocuparte demasiado, porque cuando estás construyendo un MMO estás construyendo un juego, no una fortaleza industrial plataforma de chat criptográficamente segura.
Debe implementar los mensajes de chat de la siguiente manera:
El punto más vulnerable aquí es la transmisión inicial de cliente a servidor. Si alguien husmeaba esos paquetes, podían ver mensajes que técnicamente no estaban destinados a ellos. Podrías cifrar los datos, pero eso supone un gran esfuerzo por una ganancia mínima. El cliente debe ser capaz de descifrar los paquetes de chat eventualmente, e interceptar los paquetes a medida que salen del cliente sería el mejor lugar para hacer el espionaje mencionado anteriormente, por lo que la clave ya está disponible para el fisgón, solo un poco más difícil de encontrar.
Sin embargo, es muy importante que pases tu chat a través de un servidor que controlas. No es necesario que sea el servidor del juego, puede ser un servidor dedicado para canalizar el chat, pero desea controlar el enrutamiento. Le permite supervisar las disputas de GM, le permite hacer cumplir las solicitudes de los usuarios para bloquear o silenciar a otros usuarios, resuelve los problemas que pueda tener con la perforación de NAT u otras travesuras de red que puede tener tratando de hacer chat de igual a igual, y proporciona una barrera suficiente para la piratería informal (que el chat entre pares es propenso) para resolver el 90% de las preocupaciones de seguridad. Lo cual es tan bueno como obtendrás.
fuente
Sinceramente, no estoy 100% seguro de lo que estás preguntando. Pero espero que lo siguiente sea útil.
Si observas planeshift , un MMO de código abierto, puedes ver su código y ver cómo decidieron diseñar su sistema. Esto no le dará una visión exacta de todos los MMO, pero las implementaciones más probables son similares en diferentes juegos.
Aquí hay algunas instrucciones para descargar su fuente. Deberá verificarlo a través de SVN
He echado un vistazo y si entras
src/client/gui/
verás una clase de ChatWindow. Se encarga de enviar mensajes de vuelta y cuarto al servidor para chatear y también se encarga del historial de entrada. Parece que empaquetan información y la envían al servidor para que la entregue. Así que me imagino que esta información de chat se almacena en su servidor y, por lo tanto, no es accesible para cualquiera. Es decir, a menos que pueda acceder a la base de datos de servidores para acceder a los registros de chat. Tampoco puedo imaginar que puedan conservar todo. Si mantienen registros de chat, probablemente solo sea por un cierto período de tiempo (¿unos días tal vez?)De todos modos, una respuesta amplia para una pregunta amplia. Realmente no puedo hacerlo mucho mejor que eso sin una pregunta más centrada. Siéntase libre de comentar si tiene preguntas más limitadas y puedo intentar responderlas.
Edit1: también tenga en cuenta que en la carpeta del cliente, puede encontrar y autenticar la clase. Esto maneja la autenticación del cliente, etc. Me imagino que también manejará la seguridad relacionada con el chat en términos de autenticarse en un servidor de chat. Es posible que no tengan servidores dedicados para el chat. Por lo tanto, podría ser el servidor de juegos que también ejecuta servicios de chat para todos sus clientes. Esto es algo que podrías descubrir si realmente estudias el código.
Para los MMO más grandes, pondría dinero en ellos con servidores de chat dedicados solo para ocuparse del chat entre jugadores. (Al igual que lo hacen para las instancias).
fuente
La mayoría de los MMO que jugué no almacenan mensajes durante un período de tiempo más largo. Porque lo más probable es que los convierta en una GameCompany con una insignia negativa como la NSA. A menos que los jugadores tuvieran acceso directo a su base de datos.
Runescape tiene los mensajes almacenados en la memoria caché, y solo está disponible por una pequeña cantidad de tiempo. Nunca he oído que alguien haya sido prohibido debido al hecho de que dichos datos han sido almacenados. Si alguna vez se informa otra jugada por lo que dijo. Tiene que ser rápido, hasta que su límite de chat de 500 líneas se agote. Después de ese tiempo, todos sus mensajes serán eliminados. En el lugar más concurrido, donde los jugadores se gritan entre sí, es de hasta 10 segundos.
Los mensajes siempre se envían a través del servidor y el almacenamiento se realiza en el servidor, no en el cliente. De lo contrario, el Jugador A que pirateó al cliente, podría manipular la matriz responsable del chat y, literalmente, escribir que el JUGADOR B escribió otra cosa. Después de un corto tiempo, podría informar a ese jugador por escribir algo y el caché de otros jugadores ya no podría contener esa información.
Si almacena los mensajes en el CLIENTE, lo que ha hecho un portal de chat GaduGadu.pl, los usuarios perderán la capacidad de verificar sus chats en diferentes PC. Los datos generados por el usuario serían vulnerables a terceros. Principalmente en cibercafés públicos. O en casa de amigos que podrían vengarse de su antiguo amigo.
Si lo almacena en su servidor, es imposible que el Jugador B acceda a los datos del Jugador A y viceversa. Tenga en cuenta que decir "puede el jugador B acceder a esos datos" es una pregunta amplia. ¡Nunca puede saber si los datos están seguros, a menos que su servidor esté fuera de línea! Aquí hay un ejemplo.
fuente
El almacenamiento de mensajes solo es necesario para la entrega cuando desea entregarlos en un momento posterior. Por ejemplo, cuando desea permitir que las personas envíen mensajes a jugadores que están fuera de línea y que se entregan la próxima vez que inicien sesión o cuando desea permitir que un administrador lea el chat en otro momento.
Cuando no necesita esto, el manejo del chat puede y debe hacerse completamente en la memoria.
Cada mensaje de chat que envía un cliente debe incluir información sobre el destinatario (público, gremio, mensaje privado al jugador X). El servidor debería determinar los caracteres que pueden leer el mensaje:
El mensaje debe enviarse a los clientes que controlan estos caracteres.
Enviar un mensaje a un cliente que no debe mostrarlo al usuario es una pérdida de tráfico y una violación del principio de "nunca confiar en el cliente".
fuente