Remote events
How the server handles RemoteEvents, UnreliableRemoteEvents and RemoteFunctions. Every remote is a door into the server, and an exploiter can fire it at any time with any arguments.
Back to categoriesLoadAsset with a client's id can pull any model the creator owns into the live game. How to use server-side lists and AssetTypeVerification.
Why the server shouldn't trust prices or damage from the clientcriticalWhen a remote sends a price, reward or damage value, the client decides it. How to send only the player's choice and look everything else up on the server.
How to range-check numbers sent to RemoteEventscriticalA typeof check alone lets negative numbers, NaN and infinity through. How to write range checks for amounts, quantities and stock that reject all three.
How to validate RemoteEvent arguments in RobloxcriticalEvery argument after the player in OnServerEvent comes from the client. How to check types with typeof, use allowlists and reject bad values before they reach saved data.
How to check Instances sent through RemoteEventscriticalChecking an Instance's class doesn't prove the player may use it. How to check a tool, part or model sent by the client belongs to that player.
Why remote handlers inside PlayerAdded act for the wrong playercriticalConnecting OnServerEvent inside PlayerAdded and using the outer player lets one client act for everyone. How to connect remotes once and use the player argument.
How to keep analytics data clean from exploiterswarningLogging funnel steps and economy amounts the client reports lets exploiters fill your dashboards with false data. How to check events on the server.
Why a RemoteFunction should have one OnServerInvokewarningOnly the last OnServerInvoke assignment runs, so a leftover script can silently replace your checks. How to find and remove duplicates.
How to keep roles and answers hidden from exploiterswarningAnything sent to a client or left in ReplicatedStorage can be read. How to send each player only what they're allowed to know.
Why the server shouldn't wait on InvokeClientwarningRemoteFunction:InvokeClient lets a client stall or break server code. How to replace it with two RemoteEvents and a timeout the server controls.
Each guide covers one problem. Fixing every one of them makes a game harder to exploit, but it doesn't make it secure on its own: review your own game logic too.