Seguridad: escribe recursos sin agujeros · Lección 3/3 · 6 min
Checklist antes de publicar o instalar
Una lista rápida para no llevarte sustos, tanto si subes un recurso como si instalas uno ajeno.
Antes de INSTALAR algo de fuera
- Pásalo por la Auditoría de seguridad (backdoors, miners, exfiltración).
- Busca os.execute, load(, webhooks de Discord y http a IPs raras.
- Desconfía de lo muy ofuscado: si no puedes leerlo, no sabes qué hace.
- Pruébalo primero en un servidor de test, nunca directo en producción.
Antes de PUBLICAR lo tuyo
- Toda la lógica sensible está en el servidor y validada.
- Consultas parametrizadas (?), nada de concatenar SQL.
- Sin secretos hardcodeados (van en secrets.cfg vía GetConvar).
- Anti-spam en los eventos que dan dinero/items.
- config.lua para lo configurable; sin valores mágicos sueltos.
La seguridad no es paranoia: es respeto por los dueños de servidor que confían en tu recurso y por los jugadores. Un recurso seguro es un recurso que la gente recomienda.
Practica lo aprendido
0/3Antes de PUBLICAR tu recurso, ¿qué NO debe quedar en el código?
Pista
Lo que no quieres que se filtre en un leak de tu recurso.
Esta consulta concatena datos del jugador (inyección SQL). Conviértela en parametrizada.
Este código tiene un fallo:
local nombre = obtenerNombreDelCliente()MySQL.query('SELECT * FROM users WHERE name = "' .. nombre .. '"')Reescríbelo corregido:
Pista
MySQL.query('SELECT * FROM users WHERE name = ?', { nombre }).
Completa: lee la API key desde un convar (secrets.cfg) en vez de hardcodearla.
-- en secrets.cfg: set discord_token "tu_token"local token = ('discord_token', '')if token == '' then print('Falta configurar el token') endPista
La función nativa de FiveM para leer convars.
Reto: prográmalo tú
Repasa un recurso tuyo con esta checklist y arregla el punto más flojo que encuentres.
Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.
Ver pista
Empieza por el más crítico: ¿hay lógica de dinero/items que se decide en el cliente?
Escribe aquí tu solución:
