Veniamo ora all'ultimo e di sicuro più efficace metodo di messa in sicurezza di un gioco HTML5. Per comprendere questa strategia partiamo da un concetto che dovrebbe rappresentare un assioma per ogni sviluppatore di giochi: Non possiamo fidarci dei dati inviati dal Client; Questa affermazione si basa sul fatto che i dati che ci arrivano dal client potrebbero essere stati manipolati e non c'è modo per noi di evitarlo ne di capire se qualcosa è stato modificato intenzionalmente.
Cosa possiamo fare allora ? Beh, sicuramente possiamo realizzare un backend sul server per calcolare i risultati del gioco che stiamo eseguendo nel nostro browser. In sostanza si delega al server l'elaborazione degli eventi del gioco e sarà il server stesso a calcolare il risultato di ogni partita.
Questo implica una maggiore complessità di sviluppo del codice e sicuramente un dispendio di risorse maggiore ma è anche il modo più sicuro (la sicurezza non è mai garantita al 100%) di impedire a un malintenzionato di falsificare i propri risultati.
Mettiamo che io abbia sviluppato un gioco della roulette in Javascript utilizzando un approccio client based ossia il calcolo dei punteggi e l'invio al server da parte del client. Realizzo la roulette animata, il tavolo delle scommesse e inizio a puntare le mie fiche sui vari numeri o settori.
Seleziono un numero su cui scommettere, quindi attivo la giocata: Fase 1. La roulette gira, quando si ferma la pallina finisce in una posizione su cui non ho puntato. Fase 2. Il Client Javascript calcola il risultato negativo e lo invia al server.
Fase 3. Il server aggiorna la classifica. A questo punto(soprattuto nella Fase 2) un utente esperto di javascript inizia a cercare qualche indizio che lo porti a capire come inviare risultati falsificati al server, si apre il sorgente della pagina web, si studia un po il codice vedendo i metodi e le funzioni che sembrano fare al caso suo quindi apre una console javascript e inizia a lanciare funzioni provando e riprovando fino ad ottenere una risposta positiva dal server.
Tutto questo è stato possibile perché il Client stesso includeva il codice di invio del risultato verso il server (codice che è stato rintracciato e usato in modo illecito). Vediamo adesso lo stesso gioco implementato in modo differente, ovvero con un back end sul server remoto: Il giocatore seleziona un numero su cui scommettere, quindi attiva la giocata: Fase 1.
Il Client invia al server il/i numeri su cui puntare Fase 2. Il Server verifica la coerenza dei dati inviati (anche in base alle fiches possedute dal giocatore) e invia al Client il risultato del gioco memorizzando da subito la vincita o sconfitta ottenuta; Fase 3.
La roulette gira seguendo le idicazioni ricevute dal server, quando si ferma la pallina finisce nella posizione prestabilita; Fase 4. Il Server già conosce l'ultimo punteggio ottenuto così mostra al Client la classifica aggiornata; In uno scenario come questo l'utente che apre i sorgenti non può fare alcunché, l'unica cosa che può ottenere modificando dati e variabili è quella di ottenere una errata visualizzazione della roulette o ricevere errori di convalida delle puntate effettuate, ma siamo molto lontani dal falsificare il risultato.
Ovviamente un approccio di questo tipo richiede la realizzazione di un client più "raffinato", uno scambio maggiore di dati con il server
e un controllo più attento sulla simulazione, ma così facendo ci assicuriamo di blindare i risultati del nostro amato gioco acquistando credibilità dai nostri utenti.