The Security Audit workflow systematically identifies every vulnerability that would let an exploiter manipulate your game — from RemoteEvent handlers that accept unvalidated data to server logic accidentally placed in ReplicatedStorage. It works through eight steps: mapping your attack surface, verifying argument validation, auditing client trust, checking data exposure, reviewing rate limits, generating a severity report, applying hardened code, and re-verifying. Run this workflow before any public launch, after adding new systems, or whenever the Publish Checklist flags security items as incomplete. Trigger: “Run a security audit”, “harden my game”, “check for exploits”, or triggered from the Publish Checklist.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/brockmartin/roblox-game-skill/llms.txt
Use this file to discover all available pages before exploring further.
Remote Surface Scan
Claude maps every RemoteEvent and RemoteFunction in the project to establish the full attack surface.
- Full Mode
- Standard Mode
- Offline Mode
Uses
get_project_structure to locate all scripts, then grep_scripts to search for: RemoteEvent, RemoteFunction, BindableEvent, BindableFunction, :FireServer(, :FireClient(, :FireAllClients(, :InvokeServer(, :InvokeClient(.The output is a complete remote inventory: name, location, direction (client→server or server→client), and purpose.Validation Check
For every 2b. Range validation — Numeric values must be bounds-checked (e.g., quantity between 1 and 99). String values must be length-checked. Enum-like values must match a whitelist.2c. Cooldowns — Rate limiting must exist to prevent spam-firing. The pattern: a per-player timestamp table with a minimum interval.2d. Authorization — The player must be verified to have permission for the requested action. Does the player own the item they are equipping? Are they in the correct game state? Never trust the client to report its own permissions.
OnServerEvent and OnServerInvoke handler, Claude verifies four layers of defense.2a. Type checking — Every argument from the client must be type-checked with typeof() before use. Reject the entire request if any argument fails — do not attempt to coerce.Client Trust Audit
Claude searches for game logic running on the client that should only exist on the server.Red flags Claude scans for:
In Full/Standard modes,
| Pattern | Why It’s Dangerous |
|---|---|
Client script setting leaderstats values | Exploiter sets their own currency to any number |
| Client computing damage and sending the result | Exploiter sends one-shot damage |
| Client adding items to inventory and syncing | Exploiter duplicates any item |
Client setting its own CFrame via a remote | Exploiter teleports anywhere |
| Client telling server a purchase succeeded | Exploiter gets items for free |
grep_scripts searches client scripts (StarterPlayerScripts, StarterGui) for: leaderstats, Currency, Coins, Gems, Gold, Damage, Health — any place where the client computes a value and fires it to the server.The correct pattern: the client sends intent, the server validates and acts.Data Exposure Check
Claude audits what data is visible or accessible to clients.ReplicatedStorage — Everything here is visible to all clients. Claude checks for:
- Admin keys, API tokens, or secrets (must never be here)
- Server configuration that reveals exploitable mechanics (exact drop rates, spawn timers)
- ModuleScripts containing server logic (must live in ServerScriptService or ServerStorage)
FireClient / FireAllClients:- Other players’ private data (inventory, currency, stats) must not be broadcast to everyone
- Internal IDs or keys that could be replayed in forged requests
Attribute, IntValue, or StringValue on replicated instances.Rate Limiting Check
Claude verifies that every server-side remote handler has a per-player cooldown.
Players who exceed rate limits should be warned or kicked — not just silently ignored — so that exploit attempts are detectable in logs.RemoteFunction abuse —
| Action Type | Recommended Minimum Interval |
|---|---|
| Combat actions | 0.1–0.5 seconds |
| Economy actions (buy/sell) | 0.5–1.0 seconds |
| Chat/social actions | 1.0–3.0 seconds |
| UI/cosmetic actions | 0.2–0.5 seconds |
OnServerInvoke is synchronous and blocks the calling thread. An exploiter can spam-invoke to exhaust server threads. Prefer RemoteEvents wherever possible; if RemoteFunctions are necessary, apply aggressive rate limiting.Payload size validation — Large tables sent via remotes can be used for denial-of-service. Validate table size and depth before iterating.Vulnerability Report
Claude compiles all findings into a prioritized security report.
| Severity | Criteria |
|---|---|
| Critical | Exploiter can directly manipulate currency, items, or stats — or crash the server. No validation on a sensitive remote. |
| High | Exploiter gains unfair competitive advantage or accesses other players’ private data. |
| Medium | Missing defense-in-depth layers (cooldowns exist but no type checking, or vice versa). |
| Low | Best-practice gaps that do not currently create an exploit path but weaken overall security posture. |
Apply Hardened Code
For each vulnerability, Claude provides or directly applies the fix.Reusable validation module:Usage in a handler:Fix categories Claude addresses:
- Validation wrappers — reusable module as above
- Rate limiting module — centralized per-player cooldown management
- Server-authoritative rewrites — moving client-trusted logic to the server
- Data relocation — moving sensitive modules from ReplicatedStorage to ServerStorage
Re-Verify
After fixes are applied, Claude re-runs the audit to confirm all issues are resolved.
- Repeat the Remote Surface Scan (Step 1) to confirm no new unprotected remotes were introduced
- Repeat the Validation Check (Step 2) on all modified handlers
- Confirm all Critical and High findings are resolved
- Document any accepted Medium/Low risks with written justification
For reference implementations of every validation and rate-limiting pattern covered in this workflow, see Security Hardening.