Lua Academy · Oppitunti

Liitännäisten suorittamisen hiekkalaatikointi

Suorittakaa liitännäisiä rajoitetuissa ympäristöissä setfenv/load-funktioilla ja mukautetulla _ENV:llä.

Oppitunti 3/413 vaihetta

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

Turvallisen 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
end

Ohjelmointirajapinnan 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
end

Muistiraja

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.

Aloita maksutta

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

  1. Liitännäisten etsiminen ja lataaminen
  2. Liitännäis-API ja hook-järjestelmä
  3. Liitännäisten suorittamisen hiekkalaatikointi
  4. Versiointi ja riippuvuuksien hallinta
← Takaisin: Lua Academy