Pour parler d'un système d'un jeu que je connais — Minecraft —, celui-ci cumule deux techniques.
La première, c'est celle citée par Folaefolc, pour les actions qui ne nécessitent pas une très faible latence. Lorsqu'une telle action est effectuée par le client (par exemple, poser un bloc), le client va dire au serveur « je fais ça », et attendre que le serveur confirme que c'est bon. Pour donner une impression de fluidité, le client va graphiquement effectuer l'action immédiatement dans certains cas, et en cas d'action invalide, elle sera retirée côté client (typiquement, un bloc qui n'aurait jamais dû être posé sera retiré).
Pour d'autres actions ce n'est pas vraiment possible car il est nécessaire d'avoir une grande fluidité côté client pour que tout soit fluide. Typiquement, les déplacements ou certaines actions. Dans ce cas, ce qui est fait, c'est que le serveur fait de base confiance au client, et vérifie périodiquement ses actions et leur cohérence (vitesse, par exemple). Dans ce cas précis il est difficile de les « corriger », mais ça peut être utilisé pour avertir d'éventuels modérateurs ou bannir automatiquement, selon les cas, selon les serveurs.
Ce n'est pas le meilleur système pour bien contrer la triche, mais il permet une plus grande fluidité d'actions pour les clients, même avec une connexion dégradée.
Pour ce qui est de Minecraft, le premier point est globalement natif, mais le second se borne aux déplacements et à un avertissement dans la console du serveur. Certains serveurs ajoutent des surcouches pour avoir un système plus complet pour éviter la triche.