0Pricing
Lua Academy · درس

وضع تنفيذ الإضافات في بيئة معزولة

شغّل الإضافات في بيئات مقيّدة باستخدام setfenv/load مع _ENV مخصص

وضع تنفيذ الإضافات في بيئة معزولة درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

لماذا نعزل الإضافات؟

يمكن لشفرة الإضافة غير الموثوقة استدعاء دوال خطرة، مثل os.execute وio.open وload، أو الوصول إلى حالة التطبيق الخاصة. وتقيّد البيئة المعزولة ما يمكن للشفرة فعله.

_ENV مخصص في Lua 5.2+

في Lua 5.2+، تكون البيئة العامة لكل كتلة هي _ENV. حمّل الكتلة باستخدام _ENV مقيّد للحد من الوصول إليها.

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

إنشاء بيئة آمنة

أنشئ بيئة بقائمة سماح لا تتضمن إلا دوال المكتبة القياسية الآمنة.

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

حظر الدوال الخطرة

استبعد صراحةً: os وio وload وloadfile وdofile وrequire وdebug. لا تنسخها إلى safeEnv.

تحميل الملفات في بيئة معزولة

حمّل ملف الإضافة ونفّذه في البيئة المعزولة.

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

توفير الوصول إلى واجهة برمجة التطبيقات

امنح الإضافات المعزولة إمكانية الوصول إلى واجهة برمجة تطبيقات مقيّدة للتطبيق، وذلك بتضمين الأساليب الآمنة فقط في البيئة.

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

منع الوصول إلى _ENV

لا تُضمّن _G أو _ENV أو load في البيئة المعزولة. إذ تتيح هذه العناصر الخروج من البيئة المقيّدة.

عدّ التعليمات باستخدام debug.sethook

امنع الحلقات اللانهائية عبر عدّ التعليمات المنفّذة وإيقاف التنفيذ بعد تجاوز حد معين.

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

حد الذاكرة

اجمع بين عدّ التعليمات وإجراء فحوصات دورية باستخدام collectgarbage("count") لإيقاف التنفيذ إذا تجاوز استخدام الذاكرة حدًا معينًا.

التقاط المخرجات

استبدل print في البيئة المعزولة بدالة مخصّصة تلتقط المخرجات في مخزن مؤقت بدلًا من كتابتها إلى stdout.

عمليات الخروج من البيئة المعزولة التي يجب تجنبها

من مسارات الخروج المعروفة: debug.getupvalue، واستخدام getmetatable على الكائنات القياسية، واستخدام coroutine.wrap مع شفرة خطرة. راجع جميع عناصر البيئة بعناية.

سؤال حول البيئة المعزولة

كيف تمنع الشفرة المعزولة من استدعاء os.execute؟

مراجعة: عزل الإضافات

أنشئ _ENV بقائمة سماح لا تتضمن إلا واجهات برمجة التطبيقات الآمنة. حمّل شفرة الإضافة باستخدام load(code, name, "t", safeEnv). استخدم عدّ التعليمات لمنع الحلقات اللانهائية. لا تُضمّن load أو debug أو _G في البيئة المعزولة.

الأسئلة الشائعة

هل درس «وضع تنفيذ الإضافات في بيئة معزولة» مجاني؟

نعم — نص درس «وضع تنفيذ الإضافات في بيئة معزولة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «وضع تنفيذ الإضافات في بيئة معزولة»؟

شغّل الإضافات في بيئات مقيّدة باستخدام setfenv/load مع _ENV مخصص تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «وضع تنفيذ الإضافات في بيئة معزولة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. اكتشاف الإضافات وتحميلها
  2. واجهة API للإضافات ونظام الخطافات
  3. وضع تنفيذ الإضافات في بيئة معزولة
  4. إدارة الإصدارات والتبعيات
← العودة إلى Lua Academy