Il modo corretto per convalidare gli input dell'utente

3

Attualmente sto sviluppando un gioco di applicazioni multiplayer su Android e la logica lato server è implementata utilizzando le funzioni cloud, che è un ambiente privo di server. La logica dell'applicazione è la seguente: due utenti ricevono una domanda (ad esempio la stessa) e entrambi cercano di rispondere. Quando un utente risponde alla domanda, controlliamo se la risposta è corretta o meno sul lato server. Questo è il posto dove sono confuso. Supponiamo che la risposta dell'utente non sia corretta. Il server arriverà a questa conclusione e invierà i dati al lato client per notificare all'utente che la risposta è errata. Supponiamo che il codice client sia il seguente:

boolean is_correct_answer = getServerResponse();

Nel nostro esempio, getServerResponse() restituirà false in questo caso (ad esempio poiché la risposta dell'utente non è corretta). Da quello che capisco, il codice lato client può essere manipolato, e quindi il valore di is_correct_answer può essere impostato su true da qualche hacker. Pertanto, la validazione lato server non è stata affatto utile nel nostro esempio. La mia domanda, quindi, è: qual è il modo corretto di convalidare le risposte degli utenti e successivamente di notificare loro se la loro risposta era corretta o meno?

    
posta TraverseTown 31.01.2018 - 05:07
fonte

2 risposte

1

is_correct_answer dovrebbe essere un membro public static final boolean di un'istanza di una classe; qualcosa come una classe di domande, al contrario di una variabile che viene riassegnata a un valore più di una volta.

Oltre a ciò, se si tratta di un'applicazione Android nativa (non webview), sembra essere abbastanza coinvolta e difficile da alterare i valori di runtime lato client, dove un utente dovrebbe modificare il valore memorizzato in quell'indirizzo di memoria.

Mi sono imbattuto in approcci interessanti, superfici di attacco e altro che potresti voler prendere in considerazione al link

    
risposta data 31.01.2018 - 08:00
fonte
1

Questa non è una convalida dell'input ma un controllo di integrità dei dati - qualsiasi cosa sul client non dovrebbe essere considerata attendibile al di fuori del dominio di controllo e all'interno di un utente malintenzionato se lo desidera.

Questo ha detto cosa stai cercando di impedire qui? Qualsiasi valore sul client può essere modificato perché al di fuori del tuo controllo: puoi solo essere sicuro di convalidare ciò che arriva sul server.

L'altra cosa qui è - pensi che questo sia un probabile attacco, qualcuno sta davvero attaccando la tua applicazione o il tuo tempo è trascorso meglio a focalizzare altrove dove?

    
risposta data 31.01.2018 - 08:16
fonte

Leggi altre domande sui tag