Liitännäisten suorittamisen hiekkalaatikointi
Suorittakaa liitännäisiä rajoitetuissa ympäristöissä setfenv/load-funktioilla ja mukautetulla _ENV:llä.
Liitännäisten suorittamisen hiekkalaatikointi on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Miksi pluginit kannattaa eristää hiekkalaatikkoon?
Luottamusta vailla oleva plugin-koodi voi kutsua vaarallisia funktioita, kuten os.execute, io.open ja load, tai käyttää sovelluksen yksityistä tilaa. Hiekkalaatikko rajoittaa koodin toimintamahdollisuuksia.
Mukautettu _ENV Lua 5.2:ssa ja uudemmissa
Lua 5.2:ssa ja uudemmissa jokaisen koodilohkon globaali ympäristö on _ENV. Ladatkaa koodilohko rajoitetulla _ENV-ympäristöllä, jotta sen käyttöoikeuksia voidaan rajoittaa.
local function sandbox(code, env)
local chunk, err = load(code, "sandbox", "t", env)
if not chunk then return nil, err end
return pcall(chunk)
endTurvallisen ympäristön rakentaminen
Luokaa sallittujen toimintojen luettelon mukainen ympäristö, joka sisältää vain turvallisia standardikirjaston funktioita.
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,
}Vaarallisten funktioiden estäminen
Poissulkekaa nimenomaisesti seuraavat: os, io, load, loadfile, dofile, require ja debug. Älkää kopioiko niitä safeEnv-ympäristöön.
Tiedostojen lataaminen hiekkalaatikossa
Ladatkaa plugin-tiedosto ja suorittakaa se hiekkalaatikkoympäristössä.
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
endOhjelmointirajapinnan käyttöoikeuksien tarjoaminen
Antakaa hiekkalaatikossa toimiville plugineille rajoitettu pääsy sovelluksen ohjelmointirajapintaan lisäämällä ympäristöön vain turvalliset metodit.
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})_ENV-käytön estäminen
Älkää sisällyttäkö hiekkalaatikkoon kohteita _G, _ENV tai load. Niiden avulla rajoitetusta ympäristöstä voi poistua.
Ohjeiden laskeminen debug.sethookilla
Estäkää äärettömät silmukat laskemalla suoritettuja ohjeita ja keskeyttämällä suoritus rajan ylittyessä.
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
endMuistiraja
Yhdistäkää ohjeiden laskemiseen säännölliset collectgarbage("count")-tarkistukset ja keskeyttäkää suoritus, jos muistin käyttö ylittää kynnysarvon.
Tulosteen sieppaaminen
Korvatkaa hiekkalaatikkoympäristön print mukautetulla funktiolla, joka sieppaa tulosteen puskuriin sen sijaan, että kirjoittaisi sen vakiotulosteeseen.
Vältettävät hiekkalaatikosta poistumisen keinot
Tunnettuja poistumisreittejä ovat debug.getupvalue, getmetatable-funktion käyttö vakio-olioihin sekä vaarallisen koodin suorittaminen coroutine.wrap-funktion avulla. Tarkistakaa kaikki ympäristön merkinnät huolellisesti.
Hiekkalaatikkoa koskeva kysymys
Miten estätte hiekkalaatikossa suoritettavaa koodia kutsumasta funktiota os.execute?
Kertaus: pluginien eristäminen hiekkalaatikkoon
Luokaa sallittujen toimintojen luettelon mukainen _ENV, joka sisältää vain turvalliset ohjelmointirajapinnat. Ladatkaa plugin-koodi komennolla load(code, name, "t", safeEnv). Estäkää äärettömät silmukat laskemalla suoritettuja ohjeita. Älkää koskaan sisällyttäkö hiekkalaatikkoon kohteita load, debug tai _G.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Liitännäisten suorittamisen hiekkalaatikointi” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Liitännäisten suorittamisen hiekkalaatikointi”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Liitännäisten suorittamisen hiekkalaatikointi”?
Suorittakaa liitännäisiä rajoitetuissa ympäristöissä setfenv/load-funktioilla ja mukautetulla _ENV:llä. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Liitännäisten suorittamisen hiekkalaatikointi”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Liitännäisten etsiminen ja lataaminen
- Liitännäis-API ja hook-järjestelmä
- Liitännäisten suorittamisen hiekkalaatikointi
- Versiointi ja riippuvuuksien hallinta