Kısıtlı Bir Korumalı Alan Oluşturma
Güvenli bir _ENV beyaz listesi oluşturun ve güvenilmeyen kodu load() ile çalıştırın.
Kısıtlı Bir Korumalı Alan Oluşturma, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Hedef
Kısıtlanmış bir korumalı alan, güvenilmeyen Lua kodunu güvenli biçimde çalıştırmanızı sağlar: Kod hesaplama yapabilir, dizeleri ve matematiği kullanabilir; ancak dosya sistemine, OS'ye veya ağa erişemez.
İzin Listesi Yaklaşımı
Korumalı alan ortamını sıfırdan oluşturun ve yalnızca güvenli, işleyişi iyi anlaşılan işlevleri ekleyin.
local function makeSandbox()
return {
print = print,
type = type,
tostring = tostring,
tonumber = tonumber,
pairs = pairs,
ipairs = ipairs,
next = next,
select = select,
unpack = table.unpack,
error = error,
pcall = pcall,
xpcall = xpcall,
math = math,
string = { format=string.format, find=string.find,
match=string.match, gmatch=string.gmatch,
gsub=string.gsub, sub=string.sub,
len=string.len, byte=string.byte, char=string.char },
table = { insert=table.insert, remove=table.remove,
concat=table.concat, sort=table.sort,
unpack=table.unpack, move=table.move },
}
endKodu Korumalı Alanda Çalıştırma
Kullanıcı kodunu, korumalı alanı _ENV olarak kullanarak yükleyin ve çalıştırın.
local function runSandboxed(code, env)
local fn, err = load(code, "user", "t", env)
if not fn then return nil, err end
return pcall(fn)
end
local env = makeSandbox()
local ok, err = runSandboxed("return 1+1", env)
print(ok, err) -- true 2Çıktıyı Yakalama
print işlevini, stdout'a yazmak yerine bir arabelleğe ekleme yapan özel bir işlevle değiştirin.
local output = {}
env.print = function(...)
local parts = {}
for i = 1, select("#", ...) do
parts[i] = tostring(select(i, ...))
end
output[#output+1] = table.concat(parts, "\t")
endDeğerleri Döndürme
Korumalı alandaki kodun değer döndürmesine izin vermek için derlenmiş parçayı bir işlev olarak çağırın ve döndürdüğü değerleri yakalayın.
local fn = load("return math.sqrt(144)", "user", "t", env)
if fn then
local ok, result = pcall(fn)
print(ok, result) -- true 12.0
endMeta Yöntem İstismarlarını Engelleme
Korumalı alandaki kodun, alan kısıtlamalarını aşmasını önlemek için meta tablolara veya rawget/rawset işlevlerine başvuru almaması gerekir.
Dize Uzunluğunu Sınırlama
Çıktı uzunluğunu sınırlamak ve çok büyük dize ayırmaları yoluyla DoS saldırılarını önlemek için dize işlemlerini geçersiz kılın.
debug.sethook ile Kaynak Sınırlama
Kontrolden çıkan kodu sonlandırmak için bir yönerge sayacı kancası ekleyin.
local function sandboxWithLimit(code, env, maxOps)
local ops = 0
debug.sethook(function()
ops = ops + 1
if ops > maxOps then error("Instruction limit exceeded") end
end, "", 100)
local result = table.pack(runSandboxed(code, env))
debug.sethook()
return table.unpack(result, 1, result.n)
endKorumalı Alanı Test Etme
Bilinen kaçış yollarını denemek için testler yazın: _G'ye erişme, load çağırma, debug kullanma; ardından bunların tümünün başarısız olduğunu doğrulayın.
Bilinen Kaçış Yolları
Yaygın kaçış yolları: string.rep("x",2^30) (bellek DoS'u), standart nesneler üzerinde ({}).__index, dize meta tablosu üzerinden debug, package.loaded üzerinden io.
Korumalı Alan Sorusu
Bir korumalı alan neden load veya dofile içermez?
Özet: Kısıtlanmış Korumalı Alan Oluşturma
Özel bir env tablosunda yalnızca güvenli işlevleri izin listesine ekleyin. load(code, name, "t", env) kullanın. debug.sethook ile yönerge sayımı ekleyin. Kaçış yollarını test edin. Hiçbir zaman load, dofile, debug veya genel tablo erişimini eklemeyin.
Sıkça Sorulan Sorular
“Kısıtlı Bir Korumalı Alan Oluşturma” dersi ücretsiz mi?
Evet — “Kısıtlı Bir Korumalı Alan Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Kısıtlı Bir Korumalı Alan Oluşturma” dersinde ne öğreneceğim?
Güvenli bir _ENV beyaz listesi oluşturun ve güvenilmeyen kodu load() ile çalıştırın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Kısıtlı Bir Korumalı Alan Oluşturma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Lua 5.2+'da _ENV Modeli
- Kısıtlı Bir Korumalı Alan Oluşturma
- Korumalı Alan Kaçışlarını Önleme
- Kaynak Sınırları ve Enstrümantasyon