Sadly speedhacking is very easy due to the fact that the client can change everything on its own machine. Even when only setting the speed change (from the gun) server-side, the player can still speedhack. What you could do is timed checks on the server, setting the speed of the player accordingly, so when the player changes its speed on his client, it gets reset. But this can be heavy on performance so might not be the perfect solution.
EDIT: In general, it’s very difficult to make a game 100% exploit proof. So I would keep exploit defence in mind, but would compare it with the potential performance decrease. In the end, exploiters are not present in very big numbers, so the experience of normal players has a big factor.