2011-01-19 8 views
12

Así que tengo este juego que se ejecuta por completo en el cliente. Sin interacción con el servidor, aparte de descargar los scripts iniciales para jugar. De todos modos, al final del juego me gustaría que el cliente me envíe los puntajes que deberían actualizarse en la base de datos del servidor. Ahora he llegado a aceptar el hecho de que no hay manera de que pueda esconder esto de un pirata informático y enviar los puntajes inalterados. Pero me gustaría saber hasta qué nivel puedo modificar todo el proceso que virtualmente se vuelve bastante inviable para que el hacker manipule los datos que se envían. Por supuesto, no me gustaría que el puntaje se envíe como texto sin formato desde el equipo del cliente y no quiero que mi servidor realice un complejo algoritmo de descifrado. ¿Cuál es la mejor manera de lograr una cantidad considerable de seguridad que cada tom dick y harry no hackear los puntajes ... Espero que alguien podría proporcionar una buena manera en que podría trabajar en ... :) Gracias¿Forma más segura de actualizar la puntuación del juego de la base de datos del cliente al servidor? Javascript

¡Así que mi resultado ideal debería ser -> tener un resultado confiable a partir de un cálculo (de puntaje) hecho por una parte no confiable (el jugador)!

operación -Editar-

Alguien me dijo algo acerca de cómo ocultar los datos en un cuadro llegar petición. Al igual que, estoy implementando este juego en lienzo (html5). Entonces, al final del juego, me pidió que buscara un juego sobre la imagen de mi servidor, y la solicitud debe contener el puntaje hash. No entendí exactamente el proceso completo, pero si pudieras explicarlo, ¡estaría muy contento! :)

coda^para que pueda enmascarar las solicitudes muy bien

Shouvik cómo lo hago !?

coda^puede redactar la suma de verificación que desea enviar. como 12312312a12313a232 es su md5 que contiene el puntaje. traer a un activo en el lienzo como

coda^server.com/images/md5_hash_of_score/congratulations.png

coda^que se puede reescribir lado del servidor a través de htaccess

+0

Este es más o menos el mismo problema que http://stackoverflow.com/questions/1901352/preventing-cheating-in-online-chess-games – Quentin

+0

@David, ¡no, esto es muy diferente! No tengo problemas con él tratando de jugar con mi juego como él lo juega solo ... Así que déjalo hacer lo que le dé la gana. Si se metió con el puntaje, tengo un algoritmo adaptativo en mi servidor que verifica si el puntaje se puede lograr razonablemente, ¡si no se PROHIBE AL USUARIO! Pero no me gustaría que fuera fácil, como solo modificar la publicación de Ajax ... – Shouvik

Respuesta

1

"Ahora he llegado a aceptar el hecho de que no hay manera en la tierra puedo ocultar esto desde un hacker y enviar las puntuaciones inalterada."

¡Oh, sí!

Puede usar RSA o cualquier otro método de cifrado de clave pública (también llamado criptografía asimétrica).

Crea un conjunto de claves (públicas y privadas) para el servidor. Haga que su código de cliente incluya la clave pública de su servidor.

Al final del juego, el código del cliente cifra el puntaje (con esta clave) y envía ambos (puntuación normal y puntaje encriptado) al servidor.

El servidor descifra y comprueba si la puntuación normal y la descifrada son las mismas. En caso afirmativo, acepte puntaje. De lo contrario, rechace (hay un hacker o error de red en el medio).

------- ----------- ACTUALIZACIÓN DE CORRECCIÓN --------------

Como Ambrosia, señaló, mi enfoque falla completamente con este tipo de ataque.

Lo que realmente desea es obtener un resultado confiable a partir de un cálculo (de puntaje) realizado por una parte no confiable (el jugador). No es una manera fácil de lograr esto.

ver esto: http://coltrane.wiwi.hu-berlin.de/~fis/texts/2003-profit-untrust.pdf

también éste: http://www.cse.psu.edu/~snarayan/publications/securecomputation.pdf

Y esto (que necesita una suscripción a la biblioteca digital ACM): http://portal.acm.org/citation.cfm?id=643477.643479

+0

"no quiero que mi servidor realice un algoritmo de descifrado complejo" – Shouvik

+0

Sí, claro. Y "lograr una cantidad considerable de seguridad" en la misma oración. Muy contradictorio, ¿verdad? –

+0

Además, ¿no tengo que pagar como dinero para usar RSA? ¿Pensé que necesitabas comprar esas llaves? – Shouvik

0

Se puede utilizar AJAX para enviar la puntuación (y los identificadores) al servidor? A menos que tengan algo como firebug abierto, no lo verán suceder.

var url = '/savescores.asp?userID=fredsmith&score=1098'; 
createRequest(); 
request.open('GET', url, true); 
etc 
+0

Sí, calculé el bit ajax. Pero supongo que tienen una consola abierta. Solo es cuestión de cambiar los parámetros de la url de la consola al actualizar la puntuación, así que no hay forma de que quiera que sea demasiado fácil para el hacker. Tal vez un poco más complicado que esto, como usar algún tipo de táctica de manipulación que no requiere mucho tiempo de proceso, son básicamente rompecabezas elementales que pueden ser resueltos por el servidor sin problemas. – Shouvik

0

hacer que el cliente le envíe las credenciales (o algún tipo de información de la sesión en caso de que no tiene las credenciales de inicio de sesión) y hacer que a través de SSL (HTTPS). De esta forma tiene tanto autenticación como control de integridad. Muy fácil y extremadamente ligero para servidor y cliente.

+0

Tal vez me perdí de agregar, pero esto eventualmente terminará en Facebook :) – Shouvik

+0

Estoy enviando la ID de FB de los usuarios con el puntaje. No creo que enviarlo a través de ssl hará la diferencia porque no estoy tratando de evitar que un hombre en el ataque medio. Es más como, estoy evitando que un hombre que está enviando ataque: D – Shouvik

+0

obtuvieron esta dirección https://ssl.facebook.com/ pero no tengo absolutamente ninguna experiencia con ella. No me sorprendería si SSL no funciona para Facebook. Lo que a su vez me enfurece mucho, porque transfieren toda esa información personal y nunca se preocupan por protegerla grrrrrrr! –

4

Parece que sabes esto ya, pero sólo para estrés; no puedes evitar que alguien haga esto; ¡solo puedes hacerlo lo más difícil posible!

Supongamos que envíe actualmente la partitura como:

/submit_score.php?score=5 

Alguien viendo en Firebug puede distinguir fácilmente si se presenta la puntuación, y para alterarlo. submit_score.php lo regala, al igual que el nombre del parámetro. El puntaje es un entero fácilmente distinguible.

  1. Cambiar el punto final: /interaction.php?score=5
  2. Cambiar el nombre del parámetro: /interaction.php?a=5

Se está haciendo más difícil para el usuario para resolver lo que está pasando.

Ahora puede hacer que el puntaje sea más difícil (de nuevo, más difícil, no imposible), para cambiar. En primer lugar, puede encriptarlo (obviamente, tendrá que poder descifrarlo más tarde).

  1. Base 64 codifícalo.
  2. Números -> Letras (1 = a, 2 = b, etc.).
  3. Invierta el orden de la representación del puntaje.

Lo nombra, lo hace. Entonces ahora tiene interaction.php?a=e.

Lo siguiente que puede hacer es ajustar el puntaje con otra cosa. Envíe el hash con el puntaje y vuelva a calcularlo en el servidor.Por ejemplo, md5() la puntuación con una cadena aleatoria, y enviar la puntuación (codificada), la cadena y el hash en la solicitud:

/interaction.php?a=e&str=abcde&hash=123456789abcefbc 

Cuando la petición acierta en el servidor, hacer:

if (md5($_GET['a'] . $_GET['str']) !== $_GET['hash']) exit; 

Obviamente, las personas pueden (relativamente) acceder fácilmente a su código JavaScript y ver qué está sucediendo; así que hazlo más difícil allí. Minificar y ofuscar el código.

Si le dificulta lo suficiente a alguien, intentará comprender su JavaScript, intente usar Firebug, no entienda lo que está pasando y no se moleste; por el bien de obtener algunos puntos extra en tu juego.

+0

Gracias por la respuesta. Sí, soy muy consciente de las cosas que mencionaste. :) Voy a ofuscar el código obviamente hasta un punto irreconocible: D Lo que más me interesa es saber básicamente un patrón de escondidas para irritar realmente a la persona que está jugando el mecanismo de puntuación en una medida en que no sea factible él. Publiqué esta pregunta aquí con la esperanza de que pudiera acumular ideas variadas a partir de aquí y luego mezclarlas para preparar mi propia respuesta, aunque el enlace en papel de @ypercube parece ser algo que podría ayudarme mucho :) Gracias ¡de nuevo! – Shouvik

Cuestiones relacionadas