Highscores online. ¿Cómo evitar puntuaciones falsas?

Started by panreyes, March 26, 2013, 02:43:24 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

panreyes

Holas. A ver cómo se os ocurre.


Tengo una tabla de records online, y uno de mis juegos envía la puntuación del jugador a un servidor web que incluye en la tabla esa puntuación en caso de superar algún puesto y devuelve los 10 primeros, o los 10 más cercanos a ese jugador.


Tengo bien clara la parte de servidor y la parte del cliente, pero me falta saber cómo evitar que cualquiera pueda coger y mandar las puntuaciones desde fuera del juego.


Quiero evitar que nos rompan la tabla de puntuaciones. ¿Alguna idea?

SplinterGU

ya se hablo esto PiXeL, y la verdad que es un poco largo, busca en el foro, seguro lo encontraras facil.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

panreyes

Se habló de subir los scores y descargarlos, pero no se habló de cómo encriptar o firmar de alguna forma una puntuación para que esta sea considerada válida.


En fin, lo de siempre, ofuscar el código y enviar puntuación + hash. Ahora tengo que buscar la forma de hacer un buen hash...

Erkosone

Has pensado en un password dinámico de acceso?
- Te hablo de mi experiencia, yo trabajo en el mundo industrial con maquinaría  que vale una autentica millonada y veo que un método de protección que se suele usar muy frecuentemente y bastante simple en diseño por cierto es el de las contraseñas dinámicas estilo:


CLAVE DE ACCESO = ('numero constante') * día + ('numero constante' * mes) + ('numero constante' * año).


Es simple simple.. pero frustra las ganas de joder rápidamente.. por que no es lo normal que alguien se pase unos días descifrando el algoritmo de entrada al servicio "para subir un record??".


Se me ocurre algo mas rebuscado y que puede funcionar bastante bien y podrías actualizarlo frecuentemente o incluso automáticamente pero esto ya depende de tus conocimientos en PHP y javascript.. la cosa es simple, desde el juego programado en bennuGD conectas a un servicio web, osea, una web cutre que tengas.. te descargas un archivo de imágen y lo procesas desde el juego.. sacas el color de un pixel concreto y lo usas como 'número constante' en la formula del password.


Por supuesto el servidor php que atiende las demandas de entrada de rankings debe conocer la ubicación de este archivo y poder tener "diariamente" su propia descarga de la imagen y el valor del color de ese pixel, es usar un pequeño archivo de imagen como "targeta de acceso?" 


Si desde el servidor php que atiende al servicio de ranking eres capaz de montar un uploader automatizado de este archivo ya será la polla.. por que el cliente irá a buscar lo que haya en la dirección preestablecida como "link de descarga" y procesará el archivo de imagen que el servidor de ranking haya subido.




Bueno.. es una idea..  a partir de un pixel dentro de una imagen consiges un número.. pasas ese número por la batidora "tu algoritmo" y se lo envias al server de rankings, si todo es correcto tragará..


Y ahora que vaya alguien a intentar subir algo XD..  creo que cumple con un mínimo de seguridad si lo haces dinámico por ejemplo cada 30 minutos.. si te pillan el algoritmo estarás jodido igualmente.. pero solo por 30 minutos XD..


Bueno.. ahi queda.. haber que te parece la idea ;)

panreyes

Yo lo haría de la siguiente forma:


- Petición para pedir el patrón dinámico para subir la puntuación
- Recepción del patrón dinámico
- Firma md5 (puntuación + patron estático + patrón dinámico)
- Envío de puntuación, patrón y firma

Drumpi

Bueno, haz que el juego solicite un password al servidor y lo usas para encriptar los datos que envías al servidor, por ejemplo.
De todas formas, cualquier sistema de encriptación que uses, si das el código fuente del juego, es inútil. En ese caso tendrías que enviar info del replay para usarlo en un programa que lo reproduzca y comprobar que, efectivamente, esa puntuación es posible (si no hay elementos aleatorios en el juego, basta con guardar el estado de pulsación de cada tecla en cada frame, si no, tendrás que guardar esa info aleatoria también).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)