Lua Academy · Pelajaran

Penyahkotakan Pelaksanaan Pemalam

Jalankan pemalam dalam persekitaran terhad menggunakan setfenv/load dengan _ENV tersuai.

Pelajaran 3 daripada 413 langkah

Penyahkotakan Pelaksanaan Pemalam ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Mengapakah Pemalam Perlu Dikotak Pasirkan?

Kod pemalam yang tidak dipercayai boleh memanggil fungsi berbahaya (os.execute, io.open, load) atau mengakses keadaan aplikasi peribadi. Kotak pasir mengehadkan perkara yang boleh dilakukan oleh kod.

_ENV Tersuai dalam Lua 5.2+

Dalam Lua 5.2+, persekitaran global setiap cebisan kod ialah _ENV. Muatkan cebisan kod dengan _ENV yang terhad untuk mengehadkan aksesnya.

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

Membina Persekitaran Selamat

Cipta persekitaran senarai putih yang hanya mengandungi fungsi pustaka piawai yang selamat.

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

Menyekat Fungsi Berbahaya

Kecualikan secara jelas: os, io, load, loadfile, dofile, require, debug. Jangan salinnya ke dalam safeEnv.

Memuatkan Fail dalam Kotak Pasir

Muatkan fail pemalam dan laksanakan fail itu dalam persekitaran kotak pasir.

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

Menyediakan Akses API

Berikan pemalam yang dikotak pasir akses kepada API aplikasi yang terhad dengan hanya menyertakan kaedah selamat dalam persekitaran.

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

Menghalang Akses _ENV

Jangan sertakan _G, _ENV atau load dalam kotak pasir. Semua ini membolehkan pelarian daripada persekitaran terhad.

Mengira Arahan dengan debug.sethook

Halang gelung tanpa penghujung dengan mengira arahan yang dilaksanakan dan menghentikannya selepas had tertentu.

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

Had Memori

Gabungkan pengiraan arahan dengan semakan berkala collectgarbage("count") untuk menghentikan pelaksanaan jika penggunaan memori melebihi ambang.

Penangkapan Output

Gantikan print dalam persekitaran kotak pasir dengan fungsi tersuai yang menangkap output ke dalam penimbal dan bukannya menulis ke stdout.

Pelarian Kotak Pasir yang Perlu Dielakkan

Vektor pelarian yang diketahui: debug.getupvalue, getmetatable pada objek piawai, dan coroutine.wrap bagi kod berbahaya. Semak semua entri persekitaran dengan teliti.

Soalan tentang Kotak Pasir

Bagaimanakah anda menghalang kod yang dikotak pasir daripada memanggil os.execute?

Imbas Kembali: Pengkotakpasiran Pemalam

Cipta _ENV senarai putih dengan API selamat sahaja. Muatkan kod pemalam dengan load(code, name, "t", safeEnv). Gunakan pengiraan arahan untuk menghalang gelung tanpa penghujung. Jangan sekali-kali sertakan load, debug atau _G dalam kotak pasir.

Percuma untuk bermula

Pelajari Lua dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Penyahkotakan Pelaksanaan Pemalam” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Penyahkotakan Pelaksanaan Pemalam”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Penyahkotakan Pelaksanaan Pemalam”?

Jalankan pemalam dalam persekitaran terhad menggunakan setfenv/load dengan _ENV tersuai. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Penyahkotakan Pelaksanaan Pemalam” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Penemuan dan Pemuatan Pemalam
  2. API Pemalam dan Sistem Hook
  3. Penyahkotakan Pelaksanaan Pemalam
  4. Pengversian dan Pengurusan Kebergantungan
← Kembali ke Lua Academy