Nuestra aplicación de Android solo tiene inicio de sesión de Facebook. Esto es lo que sucede en el servidor:
-
Se crea un usuario cuando se envía una solicitud POST utilizando el token de acceso de usuario de Facebook en el cuerpo. Cuando un usuario se crea a través de una solicitud POST, se genera un token de API y se envía como respuesta de la siguiente manera:
{ "message": "User Successfully Created", "api_token": "ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo" }
Hice esto porque el token de API que se genera en el servidor se almacena en el almacenamiento local de la aplicación de Android y se necesita para realizar otras solicitudes.
-
Si el usuario ya existe en el servidor, la respuesta sería:
{ "message": "User Already Exists!!", "api_token": "ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo" }
Esto ocurre en caso de que el usuario elimine la aplicación y la vuelva a instalar.
-
Para enviar una puntuación, se debe enviar una solicitud de PATCH con el siguiente encabezado y cuerpo:
Content-Type: application/x-www-form-urlencoded api_token: ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo fb_id: xxxxxxxxxx distance: 2 golds: 19 xp: 23
Ahora, el problema es que he detectado una laguna.
Una persona puede encontrar su token de acceso de usuario de Facebook y su ID de Facebook en cualquier momento. Por lo tanto, si realizan una solicitud POST con ese token de acceso de usuario, recibirán el api_token
(en la respuesta "¡El usuario ya existe!"). Y una vez que tienen api_token
y fb_id
, pueden realizar una solicitud de PATCH para modificar sus puntuaciones a lo que quieran.
¿Qué estoy haciendo mal? ¿Cómo puedo evitar que los usuarios modifiquen sus datos de esta manera?