FiveM event security is critical for roleplay servers. Exploiters can trigger server events from the client, giving themselves money, items, weapons, or admin privileges if events are not properly secured.
The Core Problem
When you use TriggerServerEvent from client-side code, any player with a Lua executor can call that event with any arguments. If your server blindly trusts client data, exploiters can:
- Give themselves unlimited money
- Spawn items or vehicles
- Teleport or become invincible
- Trigger admin-only actions
Security Rules
1. Never Trust Client Data
Always validate on the server. Never let the client decide:
-- BAD: Client tells server how much money to add
RegisterNetEvent('banking:addMoney')
AddEventHandler('banking:addMoney', function(amount)
-- Exploiter can call this with any amount
AddMoney(source, amount)
end)
-- GOOD: Server calculates the amount
RegisterNetEvent('banking:claimPaycheck')
AddEventHandler('banking:claimPaycheck', function()
local job = GetPlayerJob(source)
local amount = JobPayrates[job] -- Server-side lookup
AddMoney(source, amount)
end)
2. Use Server-Side Checks
Verify that the player is allowed to perform the action:
RegisterNetEvent('vehicle:spawn')
AddEventHandler('vehicle:spawn', function(model)
local src = source
-- Check if player owns this vehicle
if not PlayerOwnsVehicle(src, model) then
print('Exploit attempt by player ' .. src)
return
end
-- Proceed with spawn
end)
3. Rate Limit Events
Prevent players from spamming events:
local lastAction = {}
RegisterNetEvent('action:perform')
AddEventHandler('action:perform', function()
local src = source
local now = os.time()
if lastAction[src] and (now - lastAction[src]) < 5 then
return -- Rate limited
end
lastAction[src] = now
-- Proceed
end)
4. Use Callbacks Instead of Events
Libraries like ox_lib provide callback systems that are harder to exploit:
lib.callback.register('myResource:getData', function(source)
-- Server validates and returns data
return GetPlayerData(source)
end)
5. Block Unused Events
Register only the events you need. Unregistered events that get triggered are logged by FiveM.
sv_disableclientreplays
Add this to server.cfg to prevent Rockstar Editor memory exploits:
set sv_disableclientreplays true
Anti-Cheat Resources
Many servers use server-side anti-cheat resources that:
- Detect impossible player states (speed, health, position)
- Monitor event frequency
- Log suspicious behavior
- Auto-ban or kick exploiters
FAQ
Can players trigger any server event? Yes. Any registered server event can be called from the client. Always validate server-side.
What is event spoofing? When a player uses a Lua executor to call server events with fake arguments.
Should I use client-side anti-cheat? Client-side anti-cheat can be bypassed. Always combine with server-side validation.
Related: sv_disableclientreplays explained, FiveM state bags, FiveM server requirements