Andiamo più specifici sul tuo esempio e dì che questo è un gioco di poker online. Il server contiene dati che rappresentano il centro del tavolo (incluso il piatto, il mazzo a faccia in giù e la "comunità" di carte), ma il software client controlla il loro "angolo" del tavolo (la scorta del giocatore, la sua mano, e le loro decisioni).
L'assunto è che il software client è lo stesso software rilasciato dall'autore del gioco, senza modifiche di alcun tipo, e quindi il software client è stato reso responsabile di tracciare accuratamente il proprio bankroll e la propria mano; il server "distribuisce" le carte al cliente e, proprio come farebbe il vero casinò, "dimentica" (o non sa mai) quale carta è stata distribuita.
Questa non è un'ipotesi sicura; qualcuno che può manipolare il programma client, o anche solo i messaggi inviati da e verso di esso, può scegliere la propria mano modificando i messaggi sulle carte che il server ha inviato e può similmente moltiplicare le proprie vincite (o addirittura ignorare le perdite girando "tu perdi" in "hai vinto $ 1000").
La soluzione non è lasciare che il software client abbia qualcosa che si avvicina a questo livello di controllo. Il modello da seguire è quello di un "terminale stupido"; tratta il software client come nient'altro che un cavo lungo veramente che connette la tastiera e il monitor al computer server. Il client non sa nient'altro che ciò che viene detto dal server e non fa altro che inoltrare l'input dell'utente al server e viceversa. Non ha una "logica di business", ma mostra il gioco all'utente.
Dato un modello del genere, manipolare le comunicazioni non fa bene l'aggressore; le comunicazioni dal server e i numeri e le carte sullo schermo possono essere modificate nel contenuto del cuore dell'attaccante, ma qualsiasi azione basata sui dati errati del client viene riportata alla realtà con un tonfo da parte del server. Il cliente non può dire "I raise 50 grand"; il server risponderà semplicemente "hai solo $ 20 nel tuo stack, riprova". Il cliente non può dire "Sono Bob e chiamo"; il server, vedendo che la richiesta è arrivata su una sessione sicura appartenente a Bill, dirà "No, tu sei Bill, siediti e stai zitto finché Bob non avrà effettivamente preso il suo turno". Anche gli attacchi di riproduzione, in cui un client può ascoltare la conversazione sicura tra un altro client e il server e ripetere la comunicazione per eseguire qualsiasi comando in esso contenuto, vengono rilevati e ignorati molto facilmente. Dato abbastanza di queste comunicazioni harebrained, il server potrebbe alla fine dire "Stai perdendo il mio tempo, addio" e cacciare il cliente fuori dal gioco.
Il lato negativo, come accennato, è la latenza. La strategia nell'ideale funziona per un gioco di poker, in cui tutti agiscono a turno e quindi c'è ancora molta attesa, ed è banale che il server tenga traccia di tutto ciò che accade in una volta. Non funziona così bene per un FPS o RTS, dove l'interazione tra tutti i giocatori deve essere in tempo reale o maledettamente vicina, e c'è un lotto di calcolo di proiettili e corpi che si muovono, volano, scontrano, ecc. Causa problemi quando la latenza è superiore a qualche millisecondo (indipendentemente dalla velocità dei dati); se tutti hanno un ping di 150 ms su un server di gioco, tutti vedono dove tutti gli erano 300ms fa (almeno) e se qualcuno preme il grilletto quando la testa dell'avversario è nel mirino, il server pensa che Stai girando dove la persona era in realtà fino a mezzo secondo fa e dice "ti sei perso". Ciò richiede "lag leading" dai giocatori, che sparano davanti ai loro obiettivi di una distanza in base alla loro latenza combinata, anche quando la fisica del gioco impone che il viaggio dei proiettili sia istantaneo.
Per compensare questo, il server rinuncia necessariamente al controllo, e lascia che i clienti dicano "Ho sparato a Bob in testa" quando il giocatore preme il grilletto mentre la testa di Bob appare nel mirino sul loro schermo. Ma un giocatore con una mod di gioco che può "ignorare" in modo strategico i dati in arrivo sulle posizioni degli altri giocatori può manipolare questa quantità di fiducia del cliente per eseguire l'hack "fermo immagine"; spegni i datagrammi in arrivo e tutti gli altri si bloccano sul posto, consentendo al malintenzionato un colpo di testa facile e facile. Se il server crede alla richiesta del cliente, perché nessun altro ha affermato di aver sparato a quel ragazzo per primo, l'altro è morto anche se il suo cliente lo mostra al sicuro fuori dalla linea di fuoco.
Per questo genere di cose, non c'è davvero una risposta migliore; ovunque tu posizioni il controllo sulle decisioni di tipo "arbitro" che cambiano il gioco, i giocatori accusano gli altri di barare perché hanno svuotato una clip al ragazzo a distanza ravvicinata e il server dice di aver colpito l'aria, o perché il server ha detto " Bill è morto, Bob gli ha sparato "due secondi interi dopo che Bill aveva pensato di aver eliminato la linea di fuoco di Bob dietro un ostacolo.