¿Cómo se debe transmitir y almacenar el chat en un MMO?

8

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?

Pavan Kate
fuente
3
Preguntar "cómo lo hacen los MMO" es demasiado amplio y requiere conocimiento interno para responder con convicción. Ajusté su pregunta a centrarse más en cómo se debe implementar de chat para su proyecto, con el objetivo de preservar la seguridad tanto como sea posible.

Respuestas:

13

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 cliente transmite los datos del chat, que como mínimo incluye el mensaje de chat, pero probablemente también incluye información del canal o del grupo (como chat público, chat de gremio, susurro de jugador a jugador, etc.).
  • El servidor obtiene los datos del chat. Primero lo registra, probablemente en algún lugar fuera de línea porque no es necesario mantenerlo residente en la memoria durante más tiempo del necesario. El registro es importante y a menudo se pasa por alto, pero es increíblemente útil para el arbitraje de GM y el diagnóstico forense. Cuando ejecuta un MMO, desea registrar todo .
  • Una vez que se han registrado los datos, el servidor determina quién debe recibir el mensaje de chat y lo transmite de manera adecuada. El servidor puede soltar los datos restantes en el piso; ya no lo necesita.

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
¿Funcionaría HTTPS? Presumiblemente, los mensajes de chat no son tan latentes como el resto del juego y, por lo tanto, podrían enviarse y recibirse a través de HTTPS (por ejemplo, utilizando WebSockets) utilizando un mecanismo separado de otros paquetes relacionados con el juego.
Justin
1
Podrías hacerlo funcionar, pero no veo por qué valdría la pena implementar ese canal lateral adicional, especialmente cuando es posible que aún quieras que el servidor del juego procese algunos mensajes de chat por otras razones (tal vez en realidad son comandos de barra) , tal vez contienen algún tipo de marcado de vinculación de elementos, etc.). Sin embargo, es una opción.
2

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).

Dean Knight
fuente
1

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.

Mikolaj Marcisz
fuente
0

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:

  • Para mensajes públicos, estos son los caracteres en un radio específico alrededor del carácter emisor
  • Para los mensajes del gremio, estos son los personajes que tienen el mismo gremio que el remitente que están actualmente en línea
  • Para mensajes privados, es el carácter del mismo nombre, cuando está en línea

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".

Philipp
fuente
1
Tal enfoque elimina la posibilidad de que los administradores del juego revisen los registros de chat en una fecha posterior para arbitrar disputas y manejar quejas de abuso. Por lo tanto, puede ser eficiente, pero como administrador de MMO, probablemente no sea lo que desea. Todo el chat debe registrarse y mantenerse de forma segura, al menos durante un período de tiempo predefinido antes de archivarlo / purgarlo.
MrCranky
Sin embargo, estoy de acuerdo con lo que dice sobre no enviarlo a clientes a los que no se les debe permitir leerlo; El filtrado debe hacerse del lado del servidor.
MrCranky
@MrCranky Cuando realmente desea iniciar sesión en el chat privado, lo que podría violar las leyes de privacidad en algunos países bajo ciertas condiciones, aún puede iniciar sesión en algún archivo o base de datos, pero eso no está relacionado con a quién se lo envía. Respuesta actualizada, sin embargo.
Philipp
1
No es privado si lo está enviando al servidor del juego, y el EULA siempre debe dejarlo claro. No creo que encuentres ningún MMO por ahí que finja lo contrario. No hay interacciones privadas cuando el jugador está usando el juego como intermediario; Esta no es una experiencia de chat entre pares, están interactuando con el juego.
MrCranky
1
No hay expectativas de privacidad en un juego en línea, las leyes no funcionan de esa manera.
Patrick Hughes