2011-08-10 8 views
16

Dado un juego paralelo del cliente (vamos a llamarlo juego X) y una base de datos del lado del servidor que almacena los puntajes altos ¿cómo puede después de la condición final de el juego subate de forma segura una puntuación alta en el servidor de una manera que solo se puede hacer si el juego se jugó realmente (por lo tanto, para evitar el secuestro posterior).Cómo enviar de forma segura un puntaje alto en un juego de front-end para evitar el secuestro posterior

Teniendo en cuenta este problema estableció aquí están algunas ideas que he estado pensando en

** Al empezar el juego enviar un identificador de sesión que expira después de un período de tiempo determinado para ser enviados al servidor para la verificación

el problema es que esto podría ser fácilmente explotada por solicitar el identificador de inicio a continuación, sólo forjar la puntuación

los puestos de control ** dentro del juego que POST al servidor para verificar que la persona es en realidad pla ying el juego

nuevo esto podría ser sintetizado con algunas secuencias de comandos astuta

+0

Pienso en convertir esto en una pregunta ... –

+0

Creo que es una pregunta @marc B – samccone

+0

@Marc B: "... cómo después de la condición final del juego puede sumar una puntuación más alta al servidor. .. ". ¿Cómo es eso confuso? –

Respuesta

8

Sube una repetición del juego y verificar la puntuación de esa repetición en el servidor. Por supuesto, esto solo funciona si tu juego admite repeticiones.

Como mínimo, cree un registro aproximado de lo que está sucediendo en el juego y aplique algunas verificaciones de plausibilidad.

También debe agregar algunas verificaciones de consistencia dentro del juego. De lo contrario, usaré una herramienta como ArtMoney y cambiaré el puntaje durante el juego.

Pero al final, si el usuario escribe un bot se pone muy duro.

+0

Parece que alguien ha visto el video de GWT. : D –

+0

@Amaan ¿Qué es GWT? – CodesInChaos

+0

Google Web Toolkit. Han dado consejos muy similares en su video de presentación. –

1

Haga esto ... tomar su id de sesión desde el servidor, combinarlo con algo en el juego y usar eso como una clave de cifrado, a continuación, en los datos de presentar envía todos los datos que desea + una marca de tiempo o algo más a partir de los puntos de control en el juego

utiliza Quizás SessionID + puesto de control de identificación para el cifrado de clave

+2

Y lo que impide que la persona lea la clave incluida en el juego y modifique la puntuación antes de la presentación. Nada. Esto no se puede hacer. – Matt

+0

Bueno, al final del día, cualquier solución que implique el envío de datos de puntaje al servidor se puede romper. Todo se trata de elevar el listón lo suficientemente alto donde la mayoría de la gente no engañará haciéndolo. – iamkrillin

1

¿Qué pasa algo como esto:

  1. que el servidor envíe un nonce - 'hash firmado' por llave y sello de tiempo, etc. secreta del servidor,
  2. tienen un hash a partir de algunas estructuras de datos internas + cliente clave y enviarla al servidor de forma periódica
  3. hacerlo a través de SSL

y @iamkrillin me adelantó ... pero todavía estoy va a post-it :)

+1

Y esto falla si el usuario cambia ligeramente la función que envía la puntuación más alta para enviar un valor que es 10 veces mayor. Ninguna cantidad de cifrado lo salvará si el cliente está en peligro. –

+0

Añadiendo a lo que dijo @Wladimir: en lugar de enviar acciones, podrías enviar un 'hash' de las estructuras de datos como mencioné, pero deberías ser capaz de 'reproducir' la validez de esos datos ... eligiendo solo unos pocos unos complicarán el problema lo suficiente como para que alguien rompa el sistema – PhD

+0

@Wladimir: comentario publicado. Tu comentario vino en paralelo :) – PhD

5

No hay forma de evitar que se manipule el lado del cliente. Está siendo controlado por el jugador y podría introducir cambios sutiles en la lógica de la aplicación del lado del cliente que no será detectable en el lado del servidor. La única solución que conozco es enviar todas las acciones del usuario al servidor (todas de una vez al final del juego o continuamente mientras el usuario está jugando) y hacer que el servidor las verifique (vuelva a calcular la puntuación). Si las acciones dan como resultado el puntaje que el usuario dice haber logrado, entonces acepte el puntaje. Si las acciones no coinciden con la puntuación, rechace. Será mucho más difícil generar acciones falsas que sean lógicamente consistentes.Sin embargo, no impedirá todas las técnicas de engaño (google para "proxy de apunte", algo similar podría ser posible en tu juego también).

Cuestiones relacionadas