Förhindra att sandlådor kringgås
Blockera åtkomst till biblioteket debug, missbruk av rawget/rawset och läckor av upvalues.
Förhindra att sandlådor kringgås är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.
Problemet med flyktvägar
Även med en vitlistad miljö kan kreativa angripare hitta sätt att komma åt den riktiga globala miljön. Den här lektionen behandlar kända flyktvägar och hur de stängs.
Utnyttjande av strängars metatabell
I Lua har strängar en gemensam metatabell som exponerar strängbiblioteket. Sandlådekod kan använda en sträng för att få en referens till string.rep och därifrån nå andra bibliotek.
-- Escape vector (before patching):
local s = "hello"
local getenv = s.rep -- reaches string library
-- Fix: use setmetatable on all sandboxed strings (not practical)
-- Better fix: override debug.getmetatable in the sandboxBlockering via rawget/rawset
Om rawget finns i sandlådan kan koden använda det för att kringgå __index-begränsningar och läsa direkt från riktiga tabeller.
-- Fix: exclude rawget, rawset, rawequal, rawlen from the sandbox envÅtkomst till debug-biblioteket
debug-biblioteket kan läsa och ändra alla upvalues, inklusive _ENV. Uteslut det helt från sandlådan.
package.loaded-tabell
Om require eller package är åtkomliga kan kod i sandlådan nå redan inlästa moduler, inklusive os och io.
-- Fix: exclude require and package from the sandbox envCoroutiner och återupptagning
En coroutine i sandlådan som återupptas av värdprocessen kan användas för att exfiltrera tillstånd. Använd coroutine.wrap med försiktighet och återuppta inte coroutiner i sandlådan med utökade privilegier.
Vandra genom upvalues
Utan debug-biblioteket kan kod i sandlådan inte vandra genom upvalues. Men om debug.getupvalue av misstag inkluderas kan det användas för att nå _G.
__newindex i safeEnv
Lägg till en __newindex i sandlådemiljöns metatabell för att förhindra att kod i sandlådan skapar nya globala variabler som skuggar säkra sådana.
setmetatable(safeEnv, {
__newindex = function(_, k, v)
-- allow only whitelisted keys or reject
error("Global assignment not allowed: " .. k)
end
})Proxy för math-biblioteket
I stället för att skicka med den riktiga tabellen math (som delar metatabell med standardbiblioteket) skapar du en ytlig kopia med endast de funktioner som behövs.
Automatiserade tester av utbrytningar
Underhåll en fuzzningstestsvit som provar kända utbrytningsmönster mot sandlådan. Kör den vid varje ändring av sandlådekoden.
Försvar i flera lager
Ingen sandlåda är perfekt. Lägg försvar i flera lager: begränsad miljö + instruktionsgränser + minnesgränser + isolering på operativsystemnivå (separat underprocess eller container).
Sandlåda på operativsystemnivå
För maximal säkerhet kör du Lua i en underprocess med begränsningar på operativsystemnivå: seccomp (Linux), App Sandbox (macOS) eller Docker med ett skrivskyddat filsystem.
Fråga om utbrytning ur sandlådan
Varför måste rawget uteslutas från en sandlåda?
Sammanfattning: Förhindra utbrytningar ur sandlådan
Uteslut debug, rawget/rawset, package, require och load från sandlådan. Skydda sandlådemiljön med __newindex. Kopiera bibliotekstabeller i stället för att referera till originalen. Lägg till isolering på operativsystemnivå i flera lager för maximal säkerhet.
Lär dig Lua med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 40
- Lektioner
- 159
Vanliga frågor
Är lektionen ”Förhindra att sandlådor kringgås” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Förhindra att sandlådor kringgås”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Förhindra att sandlådor kringgås”?
Blockera åtkomst till biblioteket debug, missbruk av rawget/rawset och läckor av upvalues. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Lua Academy?
Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Förhindra att sandlådor kringgås”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Lua Academy-lektionen?
Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- _ENV-modellen i Lua 5.2+
- Bygga en begränsad sandlåda
- Förhindra att sandlådor kringgås
- Resursbegränsningar och instrumentering