No solo envíe una puntuación entera al servidor. Envíe una colección de estadísticas del juego que puedan usarse para verificar que el puntaje sea realista. O puede implementar alguna clave previamente compartida para calcular la puntuación. Puede enviar puntajes y estadísticas incrementales a lo largo del juego y asegurarse de que el aumento sea razonable.
Sin embargo, no me preocuparía demasiado por eso. Las sugerencias anteriores harán que sea más difícil, pero no imposible, enviar una puntuación falsa. Sin embargo, si lo haces un poco difícil, la gran mayoría de las personas que juegan tu juego no estarán interesadas en intentar engañarlo.
Ten cuidado con cómo permites que tu juego se comunique con tu servidor. No quieres que tu juego sea un punto de entrada a tu servidor para hackear. Asegúrese de validar siempre su entrada y nunca confíe en el cliente.
Como dijo Byte56: "nunca confíes en el cliente", pero:
Nunca confiar en el cliente tiene un precio:
tener todos los juegos que se juegan en el servidor aumentará mucho el costo de su infraestructura.
Suponiendo que la mayoría de los jugadores no hagan trampa
y que la puntuación más alta se asiente después de un tiempo y deje de cambiar mucho
Hay un camino intermedio.
Grabar los juegos (en el cliente).
(Dependiendo del tipo de juego que podría ser súper fácil (por ejemplo, ajedrez) o un poco complicado (por ejemplo, un FPS multijugador),
pero siempre es factible).
Cuando un jugador termina un juego, simplemente envíe la puntuación.
Si el puntaje está dentro de un cierto rango en la parte superior (por ejemplo, el 1% superior o los 5 principales),
solicite los datos grabados del jugador
y reproduzca ese juego en el servidor.
Si los puntajes coinciden, acepte el puntaje.
De esta manera, no necesita recursos adicionales del lado del servidor para la mayoría de las jugadas,
pero puede garantizar que las puntuaciones más altas sean válidas.
fuente
No te preocupes por eso; proteger de todos los ataques es esencialmente imposible si confía en el cliente. Si nadie usa Fiddler, etc., para modificar la solicitud de AJAX, simplemente puede iniciar un depurador JS y modificar los datos de su juego para darse 1000 vidas, etc., o modificar su código, o hacer otras 100 cosas que no ha pensado.
Escribí un juego así hace varios años, y que yo sepa, nadie hizo trampa de esta manera. No hubo premio, excepto tener su nombre en la tabla de puntajes.
fuente
Reduzca la motivación social para hacer trampa, por ejemplo, usando tablas de clasificación sociales (hacer trampa solo lo hace ver bien para un puñado de amigos, no lo estropea para todos).
Verificar en el servidor. Joel Poloney tuvo una buena descripción de las técnicas en Game Developer 2012 Septiembre "Scale Your Online Game"
fuente
Cuando quieras crear un juego en línea a prueba de trampas, debes manejar toda la lógica del juego en el servidor. Todo lo que sucede en el lado del cliente puede ser controlado y manipulado por el usuario. Existen técnicas como el cifrado o la ofuscación que puede probar, pero al final todo es solo seguridad a través de la oscuridad que puede ser eludida por alguien que esté suficientemente determinado.
Claro, un juego que se ejecuta en el servidor es mucho más complicado de desarrollar, requiere muchos más recursos del lado del servidor y la latencia de la red es perjudicial para la experiencia del juego (especialmente para los juegos de ritmo rápido), pero es la única manera efectiva evitar que los jugadores hagan trampa.
fuente