2011-08-24 23 views
11

Actualmente estoy desarrollando un juego usando JavaScript/JQuery. Es un tipo simple de rompeladrillos, puntuación, niveles, etc. Estoy planeando implementar una tabla de líderes a la que los usuarios puedan enviar su puntuación final. El único problema que veo con esto es que los usuarios manipulan el puntaje usando herramientas de desarrollador en la mayoría de los navegadores. Entiendo que mantener las cosas del lado del servidor resolverá la mayoría de estos problemas, sin embargo, si hay un gran volumen de usuarios, afectará mucho a mi servidor con las solicitudes. Cookies - Fácil cambio de lado del cliente. Honestamente, no tengo ideas lógicas para promover el juego limpio porque SIEMPRE hay personas que intentan engañar/llegar a ser líderes. Dicho esto, ¿cuál es una forma eficiente y efectiva de realizar un seguimiento del puntaje del usuario sin darles acceso para cambiarlo?Prevenir trampas en Javascript Juego

+0

Debe haber algunas buenas respuestas en muchas de las preguntas relacionadas en esta página. ¿Cómo es tu pregunta diferente? –

+1

posible duplicado de [¿Qué buenas formas hay para evitar hacer trampa en los juegos de varios jugadores de JavaScript?] (Http://stackoverflow.com/questions/5250403/what-good-ways-are-there-to-prevent-cheating-in- javascript-multiplayer-games) – Konerak

Respuesta

5

ofuscan su puntaje creando una ecuación que solo se puede calcular por el lado del servidor.

Editar: RobG tiene razón en que tendrá que ser calculado en el lado del cliente.

I hackeado el juego Angry Birds cuando se lanzó en el cromo:

http://wesbos.com/all-levels-html5-angry-birds/

Sin embargo, desde entonces han ofuscar el código tanto que es imposible averiguar qué función de hash calculado ..

+0

¡Maravillosa idea! Nunca pensé en esto. Definitivamente voy a construir fuera de este concepto. ¡Gracias un montón! –

+2

El código se ejecuta en el lado del cliente, por lo que cualquier codificación que se produzca está en el cliente y puede ser suplantada. Diferentes enfoques lo hacen más o menos difícil. – RobG

+0

@RobG para un juego de rompecabezas, existe la posibilidad de hacer que suplantar el puntaje sea tan difícil como el juego en sí. –

0

base64 codifica tu página javascript. Esto debería evitar que las personas con un coeficiente intelectual por debajo de 120

http://www.opinionatedgeek.com/dotnet/tools/base64encode/

+0

No creo que necesite un IQ alto para instalar un complemento escrito por otra persona (con cualquier coeficiente de inteligencia) que envíe la puntuación que desee. – RobG

2

No se puede garantizar sin trampas, es imposible. El servidor responde a las solicitudes, eso es todo. No tiene idea de qué código se está ejecutando en el cliente, en qué tipo de agente de usuario o entorno se encuentra, ni siquiera si está ejecutando su código o un facsímil.

Puede realizar varios pasos para hacer que el spoofing sea más difícil, pero no puede hacerlo imposible. El costo de tales medidas (usualmente visto como "seguridad") generalmente se equilibra con el valor del activo que se protege.

8

hacer que la página presente una reproducción completa del juego en lugar de sólo el marcador final. Dada la semilla aleatoria y un registro cuadro por cuadro de las entradas del usuario, su servidor debería ser capaz de simular y reconstruir el juego y verificar el puntaje.

Obviamente la repetición también se puede fingir, pero equivaldría a tanto trabajo (jugar el juego y obtener un buen puntaje, aunque con la injusta ventaja de asistencia de inteligencia artificial, ralentización y otros ataques al cliente) esa herramienta puntajes asistidos deberían merecer estar en la tabla de clasificación.

+0

Esta es la solución más efectiva, pero no la más fácil. – 7yl4r

1

Una idea que tuve fue usar un temporizador de juego. Si el usuario cambia el puntaje a una cantidad que obviamente no es posible dada la cantidad de tiempo que ha pasado, se niega a registrar la información. Puede iniciar el temporizador y verificar el temporizador en su secuencia de comandos del lado del servidor.

Ahora, por supuesto, si cambian el puntaje solo por unos pocos puntos, esta comprobación puede fallar, pero, si solo agregan una cantidad menor a la impactante, ¿entonces tal vez no le importe tanto?

0

También podría hacer que la tabla de clasificación sea menos importante, compartiendo solo puntajes con amigos "de confianza". O simplemente permitiendo que las personas compartan su puntaje en cualquier sitio de redes sociales. Quizás esto elimina la motivación principal para hacer trampa en primer lugar.

Siempre podría comparar el puntaje implícitamente con las estadísticas que reunió, para saber si alguien lo está haciendo bien o no.

Cuestiones relacionadas