Penyahkotakan Pelaksanaan Pemalam
Jalankan pemalam dalam persekitaran terhad menggunakan setfenv/load dengan _ENV tersuai.
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)
endMembina 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
endMenyediakan 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
endHad 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.
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
- Penemuan dan Pemuatan Pemalam
- API Pemalam dan Sistem Hook
- Penyahkotakan Pelaksanaan Pemalam
- Pengversian dan Pengurusan Kebergantungan