¿Cómo enviar las puntuaciones de forma segura desde una aplicación que utiliza solo el inicio de sesión de Facebook?

1

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?

    
pregunta jimmypage 16.03.2017 - 11:58
fuente

0 respuestas

Lea otras preguntas en las etiquetas