Algunas cosas a tener en cuenta aquí.
Primero, las solicitudes de su servidor para algo como esto deberían ser POST, no GET. Solo las solicitudes GET deben ser idempotentes, y no hacerlo es realmente a violation of the HTTP specification.
En segundo lugar, lo que está buscando aquí es el clásico Client Trust Problem. Usted tiene para confiar en el cliente para enviar puntajes u otra información de intervalo de juego al servidor, pero no desea querer que el cliente envíe datos ilegítimos. La prevención de acciones no permitidas es fácil, pero prevenir los datos de juego sucio en una acción permitida es mucho más problemático.
Ben S hace una buena idea acerca de cómo se diseñan los protocolos de comunicación entre un cliente y un servidor como este. Permitir que los valores de puntos se envíen como datos confiables generalmente será una mala idea. Es preferible indicar que se realizó una acción, y dejar que el servidor determine cuántos puntos se deben asignar, si es que se debe asignar. Pero a veces no puedes evitar eso. Considera el escenario de un juego de carreras. El cliente tiene para enviar la hora del usuario y no puede ser abstraída en otra llamada como "completedLevelFour". ¿Entonces que haces ahora?
El enfoque simbólico que sugieren Ahmet y Dean es el sonido, pero no es perfecto. En primer lugar, el token todavía tiene que ser transmitido al cliente, lo que significa que es detectable por el atacante potencial y podría ser utilizado maliciosamente. Además, ¿qué pasa si tu API del juego debe ser apátrida? Eso significa que la autenticación de token basada en la sesión está fuera. Y ahora te metes en las entrañas profundas y oscuras del problema de confianza del cliente.
Hay muy poco que puede hacer para que sea 100% infalible. Pero puede hacerlo muy inconveniente para hacer trampa. Considere el modelo de seguridad de Facebook (todas las solicitudes API están firmadas). Esto es bastante bueno y requiere que el atacante profundice realmente en el código del lado del cliente antes de que pueda descubrir cómo suplantar un error.
Otro enfoque es la reproducción del servidor. Como en un juego de carreras, en lugar de tener un valor de "tiempo" enviado al servidor, tenga puntos de control que también registren el tiempo y los envíen todos. Establezca mínimos realistas para cada intervalo y verifique en el servidor que todos estos datos se encuentran dentro de los límites establecidos.
¡Buena suerte!
Su aplicación debe saber si esa acción está permitida. – Gumbo
Alguien podría simplemente enviar la secuencia de solicitudes al servidor que les permita llegar al punto donde esa acción está permitida aunque – user105033
Entonces su servidor no debería dar los puntos. –