2012-09-19 9 views
5

Así que estoy escribiendo un juego con JavaScript, y el mayor problema es que cualquiera que lo esté jugando que tenga un conocimiento decente de JS podría abrir mi código fuente, descubrir cómo funciona, luego conecte un game.score = 100000000000000; en la consola. Sin embargo, parece que aparte de ofuscar el guión, envolver todo en una función anónima funciona.Evitando que el código sea ejecutado por el usuario

(function() { 
    game_start = function() { 
     //etc 
    } 
    //etc 
})(); 

Cuando intento ejecutar cualquiera de los códigos de la consola de Chrome, se trata con undefined. Este es el resultado deseado, pero ¿hay alguna forma de evitar mi método que lo haga inútil? ¿O incluso una mejor manera de evitar que se ejecuten cosas desde la consola?

+4

El código del lado del cliente * nunca * puede hacerse realmente incorruptible. –

+4

Y solo podría agregar un punto de interrupción en cromo y cambiar lo que desee. No te molestes en poner mucho esfuerzo en esto. Lo mejor que se te ocurrirá es ofuscar/minimizar el código por lo que es difícil de leer. mira algo como uglifyjs –

+0

Ver http://stackoverflow.com/a/11960187/453277 –

Respuesta

4

No hay manera de asegurarse de que esa persona no haga trampas. Incluso con un código ofuscado (estoy hablando de cosas como H5b(b){if(b.pd()&&b.Ca&&b.gKa){var a=b.ra(RT.Nwa)), aún puede ver los cambios de la interfaz de usuario o las solicitudes de red y rastrear desde allí.

Algunas personas usan llamadas AJAX para validar la puntuación, p. cada vez que el puntaje aumenta/decrece, la aplicación hará una llamada AJAX al back-end y usted también hará un seguimiento del puntaje en el back-end. Cuando el usuario envía el puntaje final lo compara con el puntaje del back-end y si es diferente, sabrá que la persona estaba haciendo trampa.

Sin embargo, esto no evitará que las personas escriban un script que haga esas llamadas ajax y de esa manera hace que su puntaje sea válido.

tl; dr: no, no hay forma de garantizar que el código del lado del usuario no se vea comprometido.

+0

Parece una solución interesante. – Polyov

3

Lo sentimos, pero no hay manera de evitar realmente que un usuario haga trampa cuando el juego se ejecuta en su máquina. Cualquier código que se ejecute en la máquina de los usuarios puede ser manipulado por el usuario. Cuando quieras imposibilitar la trampa, debes implementar toda la lógica del juego en un servidor, no enviar ninguna información que el jugador no sepa y no aceptar ningún comando que el jugador no tenga permitido. hacer.

+0

O, al menos, esa lógica del juego debe validarse en el servidor. – Brad

+0

Entiendo que es imposible evitar las trampas, solo me preguntaba qué tamaño de barricada podría crear. – Polyov

Cuestiones relacionadas