Never trust the client. Every LocalScript runs on the player's machine and can be modified. All authoritative logic — damage, currency, stats, position changes — must live on the server.
FilteringEnabled is always on in modern Roblox. Client-side changes do not replicate to the server or other clients unless the server explicitly applies them.
| Dealing damage | LocalScript sets Humanoid.Health | Server reduces health after validation | | Awarding currency | LocalScript increments leaderstats | Server validates action, then increments | | Leaderstats ownership | LocalScript owns the IntValue | Server creates and owns all leaderstats |
Use when writing Roblox game scripts that handle player actions, currencies, stats, damage, or any RemoteEvent/RemoteFunction communication. Use when reviewing code for exploitable patterns, implementing anti-cheat logic, validating client requests on the server, or setting up rate limiting. Source: sentinelcore/roblox-skills.