Estoy desarrollando una aplicación web (juego) fuera de línea para android usando cordova (phonegap). La tabla de clasificación de la misma se mantiene en línea en mi servidor.
Actualmente, así es como se actualiza la tabla de clasificación
Paso 1) La puntuación del usuario se almacena en el almacenamiento local de la aplicación sin conexión.
Paso 2) El usuario presiona el botón "actualizar mi puntuación" que se conecta a Internet.
Paso 3) El botón básicamente envía una solicitud ajax a enlace
Paso 4) En base a esto, la base de datos se actualiza en mi servidor mediante el archivo scoreupdate.php y devuelve el éxito.
Estos son los problemas a los que me enfrento
1) Cualquiera puede visitar enlace fácilmente si conocen el ID de usuario (puede ser fácilmente obtenido de los datos de almacenamiento local de la aplicación) y él / ella puede actualizar su puntuación en la tabla de clasificación simplemente reemplazando el valor obtenido con puntaje para obtener una mejor posición en la tabla de clasificación.
2) Cualquier valor secreto almacenado en la aplicación o localstorage puede obtenerse fácilmente ya que todo está incorporado en javascript. La ingeniería inversa de la aplicación también es posible, por lo que no pude encontrar una manera de autenticar de manera eficiente que es la aplicación real la que envía la solicitud al servidor y no a una persona.
Mis requisitos
1) La aplicación debe poder autenticar el archivo scoreupdate.php que es la aplicación real y no una persona. Para que solo la aplicación pueda actualizar la tabla de clasificación.
2) El usuario no debe descifrar la lógica de la autenticación simplemente leyendo el código fuente de la aplicación. (p. ej., multiplicar el ID de usuario con algunos números y hacer el proceso inverso en el servidor no funcionará)
¿Hay alguna manera de lograr esto?
El cifrado de Javascript no es efectivo, ya que se puede descomponer fácilmente
EDIT
No estoy preocupado si alguien roba las credenciales del usuario a través de un MITM o cualquier otro ataque de fuerza bruta. Incluso el usuario real que posee el perfil no debería poder actualizar su propia puntuación.