Pregunta

Estoy trabajando en el back-end para un juego flash y necesito seguro los datos que entran en el marcador.

El juego va a ser alojado en muchos sitios en un banner, el usuario deberá jugar el juego en el anuncio a continuación, haga clic para acceder al sitio principal para guardar sus detalles.

En este momento estoy pensando en la línea de este

  1. El usuario juega el juego y hace clic para enviar su puntuación
  2. En el fondo, la bandera envía la partitura y el dominio de origen a un script en el sitio principal.
  3. El script comprobar el dominio es uno de los dominios válidos el anuncio se está alojado en.
  4. Si todo es correcto, el script crea un hash de esta partitura y de dominio y lo almacena en la base de datos junto a la puntuación.
  5. El script devuelve el hash a Flash, que se adoquines en la cadena de consulta de un getUrl la que abre el marcador principal
  6. La página marcador comprueba el árbitro para asegurarse de que es uno de los dominios válidos.
  7. Si se trata entonces esta comprueba la base de datos para el hash a si es un token válido
  8. Luego, el usuario rellena sus datos y el registro se actualiza basándose en el hash

Que yo sepa flash no enviar Información árbitro, lo que arroja un poco de una llave en mi plan. Entonces, ¿hay un patrón ya establecido para este tipo de interacción / Base de datos de Flash?

¿Qué tipo de Hashing / checksuming debería utilizar en el paso 4? ¿Cuál es el nombre correcto para este tipo de operación, que es un hash, una suma de comprobación o algo más?

Yo entiendo que ser una tecnología del lado del cliente, Flash nunca realmente ser QUE seguro, pero en mi mente, algo así como lo anterior es tan dificil como vas a llegar a hackear este tipo de aplicación.

ACTUALIZACIÓN: Mi objetivo principal es hacer que sea más difícil para las personas a encontrar la URL del script que se suma el resultado a la base de datos de correo no deseado y simplemente con puntuaciones falsas

.

Gracias, Greg

¿Fue útil?

Solución

He trabajado previamente en la industria del juego, e hizo algo en este sentido. Que yo sepa, nadie se molestó grietas en el marcador presentar parte.

La forma en que se hizo fue:

  1. generar un número aleatorio como una sal (de flash)
  2. Codificar la puntuación utilizando operaciones matemáticas, basado en la sal (de flash)
  3. Añadir una suma de comprobación para asegurarse de que no había templado en la puntuación (de flash)
  4. Enviar la puntuación y todos los datos necesarios a la página de la partitura sometimiento
  5. En el servidor, valida que la puntuación no ha sido templada mediante la suma de control
  6. Si la puntuación es válida, entonces la inserta en la base de datos, de lo contrario, la rechazan
  7. Si lo desea, puede registrar direcciones IP de los remitentes de las puntuaciones que violen las sumas de comprobación (tal vez una política de tres sumas de comprobación malas, estás fuera) y añadir un guión para su prohibición de acceder al servidor durante 1 hora, pero esto probablemente no se requerirá a menos que alguien quiere romper su código tan malo.

Nota:  El hash / checksuming se hizo utilizando una función personalizada. No necesitamos algo muy seguro. Se realizó con un cálculo de la sal y la puntuación. Algunas operaciones matemáticas sencillas como sumas, multiplicaciones y restas.


Editar : un simple algoritmo / matemáticas para la suma de comprobación

Digamos que el usuario tiene una puntuación de 5885 .
Se genera un número aleatorio como una sal de 134789 (longitud constante, almohadilla con 0)

cryptedScore = score * Sal (se debe usar algo un poco más complejo aquí, pero es sólo un exemple)

En nuestro ejemplo, la puntuación encriptado sería: 793233265

Ahora, para la suma de comprobación, digamos que usted quiere tener un valor de 253 como una suma de comprobación.
Agrega todos los números de su puntuación de encriptado + 9 + 7 3 + 2 + 3 + 3 + 2 + 6 + 5 = 40

Ahora, se calcula el valor de su suma de comprobación para esta partitura
253 - (suma de los números de puntuación encriptados% 253 )

Ahora, tenemos los siguientes números:
la sal = 134789
la puntuación encriptado = 793233265
la suma de control = 40

Usted hace una petición al servidor, enviando 134789793233265040 como una puntuación.

El servidor de puntuación, se puede dividir en 793233265 por 134789 dando 5885 y validar la suma de comprobación usando la misma función que antes.

Si la suma de comprobación falla, entonces los números han sido manipulados.

que probablemente podría terminar con algo mucho más seguro, pero debe hacer el truco.

Otros consejos

En esencia no desea para verificar la puntuación proviene de un cliente legítimo, que desea verificar que el cliente realmente se juega el juego para alcanzar la puntuación. En esencia, el mejor que se puede esperar es la gente que se requiere para crear una IA para jugar el juego.

Aquí hay un par de cosas que puede probar:

  • Registrar las entradas en el juego y enviar los junto con la puntuación. El servidor puede validar que la puntuación corresponde a un posible juego. También puede detectar envíos duplicados de esta manera.
  • Aplicar la limitación de velocidad para detener la presentación de los clientes de las puntuaciones a un ritmo obviamente inhumano. Aplicar límites superiores en las puntuaciones admisibles sobre la base de lo que es realmente posible lograr y límites inferiores en cosas como acciones por segundo.
  • Utilice entradas anteriores a la semilla parcialmente el generador de números pseudo aleatorio (suponiendo que se utiliza uno). Esto hace que sea menos probable que los clientes pueden alterar una presentación poco y aún así obtener un juego / combo puntuación válida.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top