La forma correcta de validar las entradas del usuario

3

Actualmente estoy creando un juego de aplicación multijugador en Android, y la lógica del lado del servidor se implementa mediante las Funciones de la Nube, que es un entorno sin servidor. La lógica de la aplicación es la siguiente: dos usuarios reciben una pregunta (es decir, la misma) y ambos intentan responderla. Cuando un usuario responde la pregunta, verificamos si su respuesta es correcta o no en el lado del servidor. Aquí es donde estoy confundido. Supongamos que la respuesta del usuario es incorrecta. El servidor llegará a esta conclusión y enviará datos al cliente para notificar al usuario que su respuesta es incorrecta. Supongamos que el código de cliente es el siguiente:

boolean is_correct_answer = getServerResponse();

En nuestro ejemplo, el getServerResponse() devolverá false en este caso (es decir, ya que la respuesta del usuario fue incorrecta). Por lo que entiendo, el código del lado del cliente puede ser manipulado, por lo que un hacker puede establecer el valor de is_correct_answer en verdadero. Por lo tanto, la validación del lado del servidor no fue útil en absoluto en nuestro ejemplo. Entonces, mi pregunta es: ¿cuál es la forma correcta de validar las respuestas de los usuarios y luego notificarles si su respuesta fue correcta o no?

    
pregunta TraverseTown 31.01.2018 - 05:07
fuente

2 respuestas

1

is_correct_answer debería ser un miembro public static final boolean de una instancia de una Clase; algo así como una clase de pregunta, a diferencia de una variable que se vuelve a asignar un valor más de una vez.

Más allá de eso, si se trata de una aplicación nativa de Android (no webview), parece ser bastante complicado y difícil de modificar los valores de tiempo de ejecución del lado del cliente, donde un usuario tendría que modificar el valor almacenado en esa dirección de memoria.

Me encontré con algunos enfoques interesantes, superficies de ataque, y más que quizás quieras considerar en enlace

    
respondido por el bFraley 31.01.2018 - 08:00
fuente
1

Esto no es una validación de entrada, sino una comprobación de integridad de los datos: no se debe confiar en que cualquier elemento del cliente esté fuera de su dominio de control y dentro de los atacantes, si lo desean.

Esto dijo, ¿qué estás tratando de evitar aquí? Cualquier valor en el cliente se puede cambiar porque está fuera de su control; solo puede estar seguro de validar lo que llega al servidor.

La otra cosa aquí es: ¿crees que este es un ataque probable, alguien realmente va a atacar tu aplicación o es mejor dedicar tu tiempo a enfocar en otra parte?

    
respondido por el McMatty 31.01.2018 - 08:16
fuente

Lea otras preguntas en las etiquetas