Ejecución de plugins en sandbox
Ejecute plugins en entornos restringidos mediante setfenv/load con un _ENV personalizado.
Ejecución de plugins en sandbox es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
¿Por qué aislar los plugins?
El código de plugins no confiable puede llamar a funciones peligrosas (os.execute, io.open, load) o acceder al estado privado de la aplicación. Un sandbox restringe lo que el código puede hacer.
_ENV personalizado en Lua 5.2+
En Lua 5.2+, el entorno global de cada chunk es _ENV. Cargue un chunk con un _ENV restringido para limitar su acceso.
local function sandbox(code, env)
local chunk, err = load(code, "sandbox", "t", env)
if not chunk then return nil, err end
return pcall(chunk)
endCreación de un entorno seguro
Cree un entorno con una lista de permitidos que contenga únicamente funciones seguras de la biblioteca estándar.
local safeEnv = {
print = print,
type = type,
pairs = pairs,
ipairs = ipairs,
tostring = tostring,
tonumber = tonumber,
table = {insert=table.insert, concat=table.concat, sort=table.sort},
string = {format=string.format, find=string.find, match=string.match},
math = math,
}Bloqueo de funciones peligrosas
Excluya explícitamente: os, io, load, loadfile, dofile, require y debug. No las copie en safeEnv.
Carga de archivos en un sandbox
Cargue un archivo de plugin y ejecútelo en el entorno sandbox.
local function sandboxFile(path, env)
local chunk, err = loadfile(path, "t", env)
if not chunk then return nil, err end
local ok, result = pcall(chunk)
if not ok then return nil, result end
return result
endProvisión de acceso a la API
Proporcione a los plugins en un sandbox acceso a una API restringida de la aplicación incluyendo únicamente métodos seguros en el entorno.
local pluginEnv = setmetatable({
app = {
on = function(e,f) app:on(e,f) end,
emit = function(e,...) app:emit(e,...) end,
log = function(msg) app:log(msg) end,
},
}, {__index = safeEnv})Prevención del acceso a _ENV
No incluya _G, _ENV ni load en el sandbox. Estos elementos permiten escapar del entorno restringido.
Conteo de instrucciones con debug.sethook
Evite los bucles infinitos contando las instrucciones ejecutadas y cancelando la ejecución al alcanzar un límite.
local function withLimit(fn, maxInstructions)
local count = 0
debug.sethook(function()
count = count + 1
if count > maxInstructions then
error("Instruction limit exceeded")
end
end, "", 100)
local ok, err = pcall(fn)
debug.sethook()
return ok, err
endLímite de memoria
Combine el conteo de instrucciones con comprobaciones periódicas de collectgarbage("count") para cancelar la ejecución si el uso de memoria supera un umbral.
Captura de la salida
Sustituya print en el entorno sandbox por una función personalizada que capture la salida en un búfer en lugar de escribirla en stdout.
Escapes del sandbox que debe evitar
Vectores de escape conocidos: debug.getupvalue, getmetatable aplicado a objetos estándar y coroutine.wrap con código peligroso. Revise cuidadosamente todas las entradas del entorno.
Pregunta sobre el sandbox
¿Cómo evita que el código en un sandbox llame a os.execute?
Repaso: aislamiento de plugins
Cree un _ENV con una lista de permitidos que contenga únicamente API seguras. Cargue el código del plugin con load(code, name, "t", safeEnv). Utilice el conteo de instrucciones para evitar bucles infinitos. No incluya nunca load, debug ni _G en el sandbox.
Preguntas frecuentes
¿La lección «Ejecución de plugins en sandbox» es gratis?
Sí — el texto completo de «Ejecución de plugins en sandbox» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Ejecución de plugins en sandbox»?
Ejecute plugins en entornos restringidos mediante setfenv/load con un _ENV personalizado. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Ejecución de plugins en sandbox»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Detección y carga de plugins
- API de plugins y sistema de hooks
- Ejecución de plugins en sandbox
- Versionado y gestión de dependencias