Mi compañero de trabajo y yo estamos desarrollando un servidor autorizado para un MMO. No podemos ponernos de acuerdo sobre cómo manejar a los clientes que se "portan mal". Mal comportamiento, en este caso, significa que los clientes que envían solicitudes "extrañas" pueden indicar un cliente comprometido / alterado, o incluso un usuario infame que inyecta datos directamente en el flujo de comunicación.
Uno de nosotros cree que la solicitud ofensiva debe abortarse, los datos del cliente deben guardarse y la conexión del cliente debe cerrarse a la fuerza ("eliminarse"). El otro cree que la solicitud debe abortarse y se debe devolver una respuesta "fallida" al cliente.
Estamos en un punto muerto porque no podemos decidir cuál es el mejor enfoque. Ambos generamos argumentos, pero nada ha sido suficiente para influir en ninguno de los dos.
Para referencia, aquí hay algunas cosas que hemos considerado:
- Desconectarse resulta en una molestia para los usuarios legítimos si cometemos un error al codificar la "detección de mal comportamiento"
- Matar al cliente elimina la necesidad de un código de respuesta de "limpieza".
- Si no eliminamos al cliente, podemos cometer un error y continuar procesando la solicitud incorrecta.
- Matar al cliente evita que un cliente comprometido envíe otras solicitudes potencialmente malas, al menos hasta que vuelvan a iniciar sesión.
- Una desconexión puede no hacer mucho para disuadir a los tramposos, mientras que una respuesta de negación puede provocar un sentimiento de "hermano mayor mirando".
¿Algún comentario sobre nuestros argumentos? ¿Hay otras razones para elegir una sobre la otra? ¿Existe algún estándar de la industria, o incluso un consenso sobre las mejores prácticas?