Seguridad en FiveM: cómo proteger tus scripts y la skill de IA que lo aplica

415 instalaciones en skills.sh

¿No quieres gestionar las skills tú mismo? Consigue la app completa.

La seguridad en FiveM a nivel de script se resume en una regla: nunca confíes en el cliente. El cliente corre en la máquina del jugador y puede estar completamente comprometido. Un executor puede llamar a cualquier evento de red que registren tus recursos, con cualquier argumento y desde cualquier punto del mapa. Si escribes Lua de servidor para una economía, un inventario, una tienda o un trabajo, esto te aplica. La skill de seguridad en FiveM le da a tu asistente de IA las reglas para escribir handlers que asumen que el cliente miente.

Qué te da la skill de seguridad en FiveM

El SKILL.md es corto a propósito. Enuncia la filosofía central y cuatro reglas de oro, y luego remite a rules/events.md para el detalle de cómo estructurar y validar RegisterNetEvent y TriggerServerEvent.

  • Autoridad del servidor. El servidor dicta la verdad. El cliente solo pide acciones.
  • Nunca confíes en los parámetros. Si un cliente dice “dame $50”, el servidor comprueba que el jugador se lo ganó. La cantidad sale del estado del servidor, no del argumento del evento.
  • Comprobación de distancia. Antes de lootear, vender o interactuar con una zona, el servidor compara la posición del jugador con el objetivo.
  • Rate limiting. Las acciones críticas llevan cooldown o debounce en el servidor para que un evento spameado no se ejecute mil veces por segundo.

La skill se centra en la defensa a nivel de script. No es un producto anti-cheat completo ni lo reemplaza. Hace que tus propios eventos sean más difíciles de abusar, que es lo que ninguna herramienta externa puede hacer por ti.

Errores comunes de seguridad en FiveM

  • Dar dinero o items desde una cantidad enviada por el cliente. El handler lee amount del evento y lo paga. Síntoma: un jugador aparece con millones después de una noche con un executor. Solución: calcula la recompensa en el servidor a partir de lo que el jugador hizo e ignora cualquier valor que mande el cliente.
  • Sin validación de source ni comprobación de permisos. El evento corre para quien lo dispare, sin comprobar que el jugador puede hacer esa acción o tiene el trabajo correcto. Síntoma: cualquiera abre la armería de la policía. Solución: resuelve source primero, carga al jugador y verifica que la acción está permitida para él.
  • Sin comprobación de distancia. Los eventos de tienda, loot y NPC se disparan desde la otra punta del mapa. Síntoma: un jugador vende en todas las tiendas a la vez sin moverse. Solución: obtén la posición del ped en el servidor y rechaza el evento si está a más de unos pocos metros del objetivo.
  • Sin cooldown. El evento se puede disparar en bucle. Síntoma: recompensas duplicadas y lag para todos. Solución: guarda un timestamp por jugador para los eventos críticos y descarta lo que llegue antes de que termine el cooldown.
  • “Anti-cheat” solo en el cliente. Comprobaciones como “¿está el jugador cerca de la tienda?” viven en el script de cliente. Corren en la máquina comprometida, así que el cheater las quita. Solución: deja las comprobaciones de cliente para la UX y repite en el servidor cada una que importe.

Por qué los asistentes de IA fallan con la seguridad en FiveM

Un asistente genérico aprendió de miles de scripts públicos de FiveM, y la mayoría confía en el cliente. Pídele un evento de “vender items” y te da un handler que toma item y price del cliente y lo paga. Funciona en pruebas y es una puerta abierta. Los asistentes también ponen las comprobaciones de distancia y permisos en el cliente, porque ahí las ponen los ejemplos.

La skill de seguridad invierte el punto de partida. El asistente lee las reglas de oro y rules/events.md antes de escribir un handler, así que valida source, deriva las cantidades del estado del servidor, comprueba la distancia en el servidor y añade cooldowns a las acciones críticas. El resultado es un handler que asume que el cliente es hostil.

Instala la skill de seguridad en FiveM en 30 segundos

  1. Haz clic en “Download SKILL.md” en la parte superior de esta página.
  2. Descomprímelo en la carpeta de skills o rules de tu herramienta de IA. La sección de instalación de abajo muestra la ruta exacta para Claude Code, Cursor y VS Code.
  3. Pídele al asistente algo concreto, como “escribe el evento de servidor para vender pescado en el muelle”, y comprueba que valida source, revisa la distancia en el servidor y calcula el pago sin confiar en un precio enviado por el cliente.

Cómo instalar esta skill

Descarga el zip, descomprímelo y coloca la carpeta donde tu herramienta carga skills o reglas. La ruta exacta depende de la herramienta:

Claude Code

Descomprime en .claude/skills/fivem-security/ dentro del proyecto (la carpeta debe contener SKILL.md). Para todos los proyectos, usa ~/.claude/skills/fivem-security/.

Documentación de skills de Claude Code

Cursor

Cursor carga las reglas del proyecto desde .cursor/rules/. Añade ahí un archivo de regla que apunte a la skill descomprimida, o pega el contenido de SKILL.md y los archivos de reglas en una regla. El formato es .mdc con frontmatter y cambia entre versiones, así que revisa la documentación de tu versión.

Documentación de reglas de Cursor

VS Code / Copilot

Copilot lee archivos de instrucciones desde .github/instructions/*.instructions.md. Copia SKILL.md ahí con un glob applyTo para tus archivos Lua y deja los archivos de reglas al lado.

Documentación de instrucciones de VS Code

El archivo SKILL.md

Este es el archivo que lee tu asistente de IA. Enlaza a los archivos de reglas incluidos en la descarga.

Contenido de la skill (incluye SKILL.md y cualquier otro archivo)

El contenido de la skill está en inglés: es documentación técnica pensada para agentes de IA.

FiveM Security

Activation Contract

Load for any net event handler, code granting money, items, vehicles or permissions, admin commands, ban logic, or questions about cheats, exploits or hardening.

Hard Rules

  • Never trust the client. The client REQUESTS; the server DECIDES from its own config and state.
  • Never accept prices, amounts, rewards or item names from the client. Derive them server-side.
  • GetInvokingResource() is nil for every net event crossing the network, player or cheater alike. NOT auth.
  • RegisterNUICallback is NOT authenticated: a cheater POSTs to any endpoint. Never the only gate before TriggerServerEvent.
  • Distance-check server-side: #(GetEntityCoords(GetPlayerPed(source)) - target), ~10 units.
  • Re-verify state server-side (job, item, cooldown) even if the client checked.
  • Rate-limit critical events; clear per-source state in playerDropped.
  • Filter native game events (weaponDamageEvent, startProjectileEvent, removeAllWeaponsEvent, ptFxEvent) with AddEventHandler + CancelEvent().
  • Authorize admin actions with ACE only: IsPlayerAceAllowed(source, object). Never an identifier list.
  • Key persistent data on license:. steam: is absent for non-Steam launches.
  • The sandbox blocks writes outside the resource's own folder, os.execute and io.tmpfile().
  • Log rejections. Escalate on counts, never auto-ban on one hit.

Decision Gates

Situation Reference
Client-sent price, amount, or any argument rules/events.md
Repeated or spammable event rules/rate-limiting.md
Damage, projectile, weapon strip, particles rules/net-game-events.md
Admin command or admin-only event rules/ace-permissions.md
Ban, whitelist, persistent record rules/identifiers.md
Resource writes files or spawns processes rules/sandbox.md
Hardening the server itself rules/server-convars.md

Execution Steps

  1. List every net event and NUI callback and the state each changes.
  2. Strip client values the server can compute itself.
  3. Add type/range, distance and state checks at the top; return early.
  4. Cooldown or token-bucket anything spammable; clean up on drop.
  5. Gate admin paths behind IsPlayerAceAllowed.
  6. Add game event filters for damage, projectiles, weapons.
  7. Log rejections with name and source id.

Output Contract

Return hardened handler(s) with validation, distance, ACE and state checks first; name the client parameters removed; include required server.cfg lines.

References

  • rules/events.md — handlers, distance, NUI callbacks.
  • rules/net-game-events.md — game event payloads, cancelling.
  • rules/ace-permissions.md — principals, objects, ACE guards.
  • rules/rate-limiting.md — cooldowns, token buckets, cleanup.
  • rules/identifiers.md — license:, tokens, deferrals.
  • rules/sandbox.md — filesystem, process, convar limits.
  • rules/server-convars.md — hardening convars.

Upstream docs: https://docs.fivem.net/docs/scripting-manual/

Preguntas frecuentes

¿Es suficiente el anti-cheat integrado de FiveM?
No. Las protecciones de la plataforma apuntan al cliente y a herramientas de cheat conocidas. No validan los eventos que registran tus propios scripts. Si tu handler confía en una cantidad enviada por el cliente, un executor puede llamarlo y nada lo impide. Tu código de servidor tiene que validar.
¿Necesito asegurar scripts cosméticos que solo corren en el cliente?
Es menos crítico, pero no cero. Un script puramente de cliente que cambia visuales locales solo afecta a ese jugador. Cualquier evento que llegue al servidor, aunque venga de un script cosmético, debe validarse en el servidor, porque un cheater puede dispararlo con cualquier argumento.
¿Puedo usar esta skill con ChatGPT?
Sí, con un paso manual. El SKILL.md y su carpeta rules son markdown plano, así que puedes pegarlos en la conversación como contexto. El soporte nativo de skills es para Claude Code, Cursor y VS Code.

Lecturas más largas del blog de FiveAI sobre el mismo tema.

Más skills