0Pricing
Lua Academy · Lektion

Plugin-Ausführung in einer Sandbox

Führen Sie Plugins in eingeschränkten Umgebungen mit setfenv/load und einer benutzerdefinierten _ENV aus

Plugin-Ausführung in einer Sandbox ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum Plugins in einer Sandbox ausführen?

Nicht vertrauenswürdiger Plugin-Code kann gefährliche Funktionen (os.execute, io.open, load) aufrufen oder auf den privaten Zustand der Anwendung zugreifen. Eine Sandbox beschränkt, was der Code tun kann.

Benutzerdefiniertes _ENV in Lua 5.2+

In Lua 5.2+ ist die globale Umgebung jedes Chunks _ENV. Laden Sie einen Chunk mit einem eingeschränkten _ENV, um seinen Zugriff zu begrenzen.

local function sandbox(code, env)
  local chunk, err = load(code, "sandbox", "t", env)
  if not chunk then return nil, err end
  return pcall(chunk)
end

Eine sichere Umgebung erstellen

Erstellen Sie eine Whitelist-Umgebung, die nur sichere Funktionen der Standardbibliothek enthält.

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,
}

Gefährliche Funktionen blockieren

Schließen Sie ausdrücklich Folgendes aus: os, io, load, loadfile, dofile, require, debug. Kopieren Sie sie nicht in safeEnv.

Dateien in der Sandbox laden

Laden Sie eine Plugin-Datei und führen Sie sie in der Sandbox-Umgebung aus.

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
end

API-Zugriff bereitstellen

Geben Sie Plugins in der Sandbox Zugriff auf eine eingeschränkte App-API, indem Sie nur sichere Methoden in die Umgebung aufnehmen.

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})

Zugriff auf _ENV verhindern

Nehmen Sie _G, _ENV oder load nicht in die Sandbox auf. Diese ermöglichen das Verlassen der eingeschränkten Umgebung.

Anweisungen mit debug.sethook zählen

Verhindern Sie Endlosschleifen, indem Sie ausgeführte Anweisungen zählen und die Ausführung nach einem Grenzwert abbrechen.

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
end

Speicherlimit

Kombinieren Sie die Anweisungszählung mit regelmäßigen Prüfungen von collectgarbage("count"), um die Ausführung abzubrechen, wenn der Speicherverbrauch einen Schwellenwert überschreitet.

Ausgabe erfassen

Ersetzen Sie print in der Sandbox-Umgebung durch eine benutzerdefinierte Funktion, die die Ausgabe in einem Puffer erfasst, statt sie nach stdout zu schreiben.

Zu vermeidende Auswege aus der Sandbox

Bekannte Auswege: debug.getupvalue, getmetatable für Standardobjekte und coroutine.wrap mit gefährlichem Code. Überprüfen Sie sorgfältig alle Einträge der Umgebung.

Sandbox-Frage

Wie verhindern Sie, dass Sandbox-Code os.execute aufruft?

Zusammenfassung: Plugins in einer Sandbox ausführen

Erstellen Sie ein Whitelist-_ENV mit ausschließlich sicheren APIs. Laden Sie Plugin-Code mit load(code, name, "t", safeEnv). Verwenden Sie die Anweisungszählung, um Endlosschleifen zu verhindern. Nehmen Sie niemals load, debug oder _G in die Sandbox auf.

Häufig gestellte Fragen

Ist die Lektion „Plugin-Ausführung in einer Sandbox“ kostenlos?

Ja — der vollständige Text von „Plugin-Ausführung in einer Sandbox“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Plugin-Ausführung in einer Sandbox“?

Führen Sie Plugins in eingeschränkten Umgebungen mit setfenv/load und einer benutzerdefinierten _ENV aus Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Plugin-Ausführung in einer Sandbox“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Plugins erkennen und laden
  2. Plugin-API und Hook-System
  3. Plugin-Ausführung in einer Sandbox
  4. Versions- und Abhängigkeitsverwaltung
← Zurück zu Lua Academy