Execução isolada de plugins
Execute plugins em ambientes restritos usando setfenv/load com _ENV personalizado.
Execução isolada de plugins é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Por que isolar extensões?
Código de extensões não confiáveis pode chamar funções perigosas (os.execute, io.open, load) ou acessar o estado privado do aplicativo. Um ambiente isolado restringe o que o código pode fazer.
_ENV personalizado no Lua 5.2+
No Lua 5.2+, o ambiente global de cada bloco é _ENV. Carregue um bloco com um _ENV restrito para limitar seu acesso.
local function sandbox(code, env)
local chunk, err = load(code, "sandbox", "t", env)
if not chunk then return nil, err end
return pcall(chunk)
endCriando um ambiente seguro
Crie um ambiente com uma lista de permissões que contenha apenas funções seguras da biblioteca padrão.
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,
}Bloqueando funções perigosas
Exclua explicitamente: os, io, load, loadfile, dofile, require, debug. Não as copie para safeEnv.
Carregando arquivos em ambiente isolado
Carregue um arquivo de extensão e execute-o no ambiente isolado.
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
endFornecendo acesso à API
Dê às extensões isoladas acesso a uma API restrita do aplicativo, incluindo no ambiente apenas métodos seguros.
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})Impedindo acesso a _ENV
Não inclua _G, _ENV ou load no ambiente isolado. Eles permitem escapar do ambiente restrito.
Contagem de instruções com debug.sethook
Evite laços infinitos contando as instruções executadas e interrompendo a execução após um limite.
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
endLimite de memória
Combine a contagem de instruções com verificações periódicas de collectgarbage("count") para interromper a execução se o uso de memória exceder um limite.
Captura de saída
Substitua print no ambiente isolado por uma função personalizada que capture a saída em um buffer em vez de escrevê-la em stdout.
Fugas do ambiente isolado a evitar
Vetores de fuga conhecidos: debug.getupvalue, getmetatable em objetos padrão e coroutine.wrap com código perigoso. Revise cuidadosamente todas as entradas do ambiente.
Pergunta sobre ambientes isolados
Como impedir que o código isolado chame os.execute?
Recapitulação: isolamento de extensões
Crie um _ENV com uma lista de permissões que contenha apenas APIs seguras. Carregue o código da extensão com load(code, name, "t", safeEnv). Use a contagem de instruções para evitar laços infinitos. Nunca inclua load, debug ou _G no ambiente isolado.
Aprenda Lua com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 40
- Aulas
- 159
Perguntas Frequentes
A aula “Execução isolada de plugins” é grátis?
Sim — o texto completo de “Execução isolada de plugins” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “Execução isolada de plugins”?
Execute plugins em ambientes restritos usando setfenv/load com _ENV personalizado. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Execução isolada de plugins”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Descoberta e carregamento de plugins
- API de plugins e sistema de hooks
- Execução isolada de plugins
- Versionamento e gerenciamento de dependências