If you build a networked game, never trust a player more than you trust their controller, just treat them as remote inputs as if they were another controller plugged into the local machine, run all of your final game state simulations on a trusted machine (the host). Most games where speedhacks and other hacks negatively affect players and ruin gameplay only rely on client side simulation for local rendering/sound/reference for state changes sent to server, if the client tells the server something that the server knows isn't true it doesn't matter.
Only trust the host to make authoritative simulations and issue game state corrections to players, it complicates your engine design, but if you want to mitigate hacking, it's a great option.
Client 2 (Non-host): Player is flying through the air majestically at (100, 0, 100) with 200% health.
Host: Client 2 is sprinting forward at (5, 0, 0) with 20% health.
Host: Client 2 kicked for cheating.