Sandbox untuk Eksekusi Plugin
Jalankan plugin dalam lingkungan terbatas menggunakan setfenv/load dengan _ENV khusus.
Sandbox untuk Eksekusi Plugin adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Mengapa Plugin Perlu Diisolasi?
Kode plugin yang tidak tepercaya dapat memanggil fungsi berbahaya (os.execute, io.open, load) atau mengakses status privat aplikasi. Kotak pasir membatasi tindakan yang dapat dilakukan kode.
_ENV Kustom pada Lua 5.2+
Pada Lua 5.2+, lingkungan global setiap potongan kode adalah _ENV. Muat potongan kode dengan _ENV terbatas untuk membatasi 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)
endMembangun Lingkungan Aman
Buat lingkungan daftar putih yang hanya berisi fungsi pustaka standar yang aman.
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,
}Memblokir Fungsi Berbahaya
Kecualikan secara eksplisit: os, io, load, loadfile, dofile, require, debug. Jangan salin fungsi-fungsi tersebut ke dalam safeEnv.
Memuat Berkas dalam Kotak Pasir
Muat berkas plugin dan jalankan dalam lingkungan 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
Beri plugin yang berjalan dalam kotak pasir akses ke API aplikasi yang dibatasi dengan hanya menyertakan metode aman di lingkungan tersebut.
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})Mencegah Akses ke _ENV
Jangan sertakan _G, _ENV, atau load dalam kotak pasir. Semua itu memungkinkan pelarian dari lingkungan terbatas.
Penghitungan Instruksi dengan debug.sethook
Cegah loop tak berujung dengan menghitung instruksi yang dijalankan dan menghentikan eksekusi setelah batas tercapai.
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
endBatas Memori
Gabungkan penghitungan instruksi dengan pemeriksaan berkala collectgarbage("count") untuk menghentikan eksekusi jika penggunaan memori melampaui ambang batas.
Penangkapan Keluaran
Ganti print dalam lingkungan kotak pasir dengan fungsi khusus yang menangkap keluaran ke buffer alih-alih menulis ke stdout.
Pelarian Kotak Pasir yang Harus Dihindari
Vektor pelarian yang diketahui: debug.getupvalue, getmetatable pada objek standar, dan coroutine.wrap untuk kode berbahaya. Tinjau semua entri lingkungan dengan saksama.
Pertanyaan tentang Kotak Pasir
Bagaimana cara mencegah kode dalam kotak pasir memanggil os.execute?
Ringkasan: Isolasi Plugin dalam Kotak Pasir
Buat _ENV daftar putih yang hanya berisi API aman. Muat kode plugin dengan load(code, name, "t", safeEnv). Gunakan penghitungan instruksi untuk mencegah loop tak berujung. Jangan pernah sertakan load, debug, atau _G dalam kotak pasir.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Sandbox untuk Eksekusi Plugin” gratis?
Ya — teks lengkap “Sandbox untuk Eksekusi Plugin” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Sandbox untuk Eksekusi Plugin”?
Jalankan plugin dalam lingkungan terbatas menggunakan setfenv/load dengan _ENV khusus. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Sandbox untuk Eksekusi Plugin” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penemuan dan Pemuatan Plugin
- API Plugin dan Sistem Hook
- Sandbox untuk Eksekusi Plugin
- Pemberian Versi dan Pengelolaan Dependensi