Guides

Roblox security guides

43 problems that show up in Roblox games, what an exploiter could do with each one, and how to fix it in Luau. They're the same checks Luaudit gives your AI when it audits your game.

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.

Why the server shouldn't trust prices or damage from the clientcritical

When 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 filter player text in Roblox with TextServicecritical

Pet names, signs and plot names typed by players must be filtered before others see them. How to use FilterStringAsync and the right TextFilterResult method on the server.

How to range-check numbers sent to RemoteEventscritical

A 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 Robloxcritical

Every 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 RemoteEventscritical

Checking 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.

How to rate limit RemoteEvents in Robloxwarning

A remote that spawns parts, plays effects or calls data stores can be fired far faster than any button. How to add a per-player cooldown on the server.

How to keep roles and answers hidden from exploiterswarning

Anything 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 InvokeClientwarning

RemoteFunction:InvokeClient lets a client stall or break server code. How to replace it with two RemoteEvents and a timeout the server controls.

Server validation

Whether the server checks that an action is allowed before it happens: that the player owns or has unlocked what they picked, hasn't claimed a reward already, is close enough to what they're using and could really have landed a hit, and that the round or their state allows it. It also covers values that only look server-side, such as teleport data and parts a client simulates, and making sure nothing can slip in between a check and the change it guards.

How network ownership lets clients move reward partscritical

An unanchored part near a player is simulated by their client. How to stop balls, crates and carts deciding rewards from client physics.

Why teleport data can't be trusted in Robloxcritical

TeleportData passes through the client, even with a SourcePlaceId check. How to carry coins, boosts and entry fees between places safely.

How to check the round state before allowing an actioncritical

Bets after the winner is known and answers after the reveal. How to keep round and player state on the server and check it in every handler.

How to check a player owns the item or zone they pickcritical

Checking that an id exists isn't the same as checking the player has it. How to check pets, skins, classes and zones against the player's own data.

How to stop daily rewards and codes being claimed twicecritical

Daily rewards, promo codes and quest prizes that pay out again on every call or rejoin. How to record claims in saved data before paying.

How to validate combat hits on the server in Robloxcritical

If the client reports hits and the server just applies damage, hits can land from anywhere. How to check range, cooldowns and ranged shots on the server.

How to stop yields letting players claim or spend twicecritical

A yield between a check and the change it guards lets the same remote pass the check twice. How to order handlers so the change happens first.

How to add server-side distance checks in Robloxwarning

Chests, shops and sell pads that work from anywhere on the map. How to check on the server that the player's character is close enough to use them.

Data stores

How the game loads and saves with DataStoreService: what happens when a load or save fails, whether two servers can hold the same player's data at once, whether servers can overwrite each other's writes, whether keys are tied to the player's UserId and chosen by the server, whether UpdateAsync callbacks stay pure, and whether saving stays within Roblox's request budgets and size limits.

Why the client should never choose a data store keycritical

Building a data store key from a user id or slot the client sent lets one player read or overwrite another's data. How to build keys on the server.

How to stop a failed data store load wiping player datacritical

Treating a failed load as a new player hands out default data, which is then saved over the real data. How to keep failed loads apart from new players.

How to session-lock player data in Robloxcritical

Without a session lock, two servers can hold the same player's data and the later save wins. How session locking with UpdateAsync works.

Why Roblox player data should be saved by UserIdcritical

Data store keys built from a player's name or display name break when they change it, and display names aren't unique. How to key saves by UserId instead.

How to use UpdateAsync for values many servers changecritical

GetAsync followed by SetAsync lets two servers overwrite each other's changes to a bank, counter or limited stock. How to use UpdateAsync and IncrementAsync instead.

How to write a safe UpdateAsync callbackcritical

Granting coins or items inside an UpdateAsync callback can pay twice when the write fails. How to keep the callback pure and grant after it succeeds.

How to stay within data store request limitswarning

Saving on every coin, kill or second played uses up the server's data store budget and gets saves dropped. How to keep values in memory and save on a timer.

How to stop player data outgrowing the data store size limitwarning

Builds, drawings and lists with no cap can grow past the 4 MB limit and stop a profile saving. How to cap and bound what players add to saved data.

How to save player data when a Roblox server shuts downwarning

Saving only in PlayerRemoving can lose data when a server closes. How to use BindToClose to wait for every save to finish.

Anti-exploit

How the game spots and handles exploiters: whether its checks run where an exploiter can't switch them off, whether the server watches the things a client controls, such as its own character's movement and touches, and whether moderation and admin powers are protected on the server.

Monetisation

How the game handles Robux purchases: developer products granted through ProcessReceipt, game pass and subscription checks, paid random items, and whether every purchase grants exactly what was bought, once, to the right player, and only after Roblox confirms it.

Backdoors

Code that lets someone outside the team run things in the game: modules loaded from the Roblox catalogue by id, code run from strings, hidden or scrambled scripts, and scripts tucked inside models, often from the Creator Store, that do more than the model needs.

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.