Lua Academy · पाठ

प्रतिबंधित सैंडबॉक्स बनाना

सुरक्षित _ENV श्वेतसूची बनाएँ और load() से अविश्वसनीय कोड चलाएँ।

पाठ 2, कुल 4 में से12 चरण

प्रतिबंधित सैंडबॉक्स बनाना, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

लक्ष्य

एक प्रतिबंधित सैंडबॉक्स आपको अविश्वसनीय Lua कोड सुरक्षित रूप से चलाने देता है: यह गणना कर सकता है और स्ट्रिंग तथा गणित का उपयोग कर सकता है, लेकिन फ़ाइल सिस्टम, OS या नेटवर्क तक पहुँच नहीं सकता।

श्वेतसूची दृष्टिकोण

सैंडबॉक्स वातावरण को शून्य से बनाएँ और उसमें केवल सुरक्षित, अच्छी तरह समझे गए फ़ंक्शन शामिल करें।

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

सैंडबॉक्स में कोड चलाना

सैंडबॉक्स को अपने _ENV के रूप में उपयोग करके उपयोगकर्ता का कोड लोड और चलाएँ।

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

आउटपुट कैप्चर करना

print को ऐसे कस्टम फ़ंक्शन से बदलें, जो stdout में लिखने के बजाय बफ़र में जोड़ता है।

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

मान लौटाना

सैंडबॉक्स किए गए कोड को मान लौटाने की अनुमति देने के लिए, संकलित चंक को फ़ंक्शन के रूप में कॉल करें और उसके लौटाए गए मान कैप्चर करें।

local fn = load("return math.sqrt(144)", "user", "t", env)
if fn then
  local ok, result = pcall(fn)
  print(ok, result)  -- true  12.0
end

मेटामेथड के शोषण को रोकना

फ़ील्ड प्रतिबंधों को दरकिनार करने से बचाने के लिए सैंडबॉक्स किए गए कोड को मेटाटेबल या rawget/rawset के संदर्भ नहीं मिलने चाहिए।

स्ट्रिंग की लंबाई सीमित करना

आउटपुट की लंबाई सीमित करने और बहुत बड़े स्ट्रिंग आवंटन के माध्यम से DoS रोकने के लिए स्ट्रिंग संचालन को ओवरराइड करें।

debug.sethook से संसाधन सीमाएँ

अनियंत्रित रूप से चलते कोड को समाप्त करने के लिए निर्देश-गणना हुक जोड़ें।

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

सैंडबॉक्स का परीक्षण

ऐसे परीक्षण लिखें, जो ज्ञात एस्केप मार्ग आज़माएँ: _G तक पहुँचना, load कॉल करना, debug का उपयोग करना, और जाँचें कि ये सभी विफल हों।

ज्ञात एस्केप मार्ग

सामान्य एस्केप मार्ग: string.rep("x",2^30) (मेमोरी DoS), मानक ऑब्जेक्ट पर ({}).__index, स्ट्रिंग मेटाटेबल के माध्यम से debug, और package.loaded के माध्यम से io।

सैंडबॉक्स प्रश्न

सैंडबॉक्स में load या dofile क्यों शामिल नहीं होता?

पुनरावलोकन: प्रतिबंधित सैंडबॉक्स बनाना

कस्टम env तालिका में केवल सुरक्षित फ़ंक्शन की श्वेतसूची बनाएँ। load(code, name, "t", env) का उपयोग करें। debug.sethook से निर्देश-गणना जोड़ें। एस्केप मार्गों का परीक्षण करें। load, dofile, debug या वैश्विक तालिका एक्सेस को कभी शामिल न करें।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Lua सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
40
पाठ
159

अक्सर पूछे जाने वाले प्रश्न

क्या “प्रतिबंधित सैंडबॉक्स बनाना” पाठ निःशुल्क है?

हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “प्रतिबंधित सैंडबॉक्स बनाना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“प्रतिबंधित सैंडबॉक्स बनाना” में मैं क्या सीखूँगा?

सुरक्षित _ENV श्वेतसूची बनाएँ और load() से अविश्वसनीय कोड चलाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“प्रतिबंधित सैंडबॉक्स बनाना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Lua 5.2+ में _ENV मॉडल
  2. प्रतिबंधित सैंडबॉक्स बनाना
  3. सैंडबॉक्स से बाहर निकलने से रोकना
  4. संसाधन सीमाएँ और इंस्ट्रुमेंटेशन
← Lua Academy पर वापस जाएँ