التحكم في الوصول والخصوصية

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

من الضروري فهم المعلومات والأصول التي يمكن للعملاء رؤيتها للحفاظ على أمان وخصوصية تجربتك. غالبًا ما يستهين المطورون بمدى ما يمكن رؤيته من قبل المستغلين وما يتم نسخه إلى العملاء. يتمتع المستغلون بالقدرة على الوصول إلى الأماكن "المقيدة" داخل عالمك إذا تمكنوا من الانضمام إلى مكان واحد. يمكنهم مشاهدة أي محتوى يتم نسخه إلى عميلهم، بغض النظر عما إذا كان مرئيًا أو قيد الاستخدام حاليًا. بالإضافة إلى ذلك، يمكن للمستغلين فك تجميع أي سكربتات محلية وModuleScripts تم نسخها، حتى لو لم يتم تنفيذها على العميل.

النقل من جانب العميل داخل العوالم

بمجرد دخولهم إلى عالم، يمكن للعملاء الانتقال إلى أي مكان داخل ذلك العالم، مما قد يتجاوز أي قيود وصول أو أبواب تقدم مقصودة. يمكن أن يؤدي ذلك أيضًا إلى تسريب غير مقصود لمحتوى غير معلن عنه، على سبيل المثال من تجربة تطوير أو اختبار. من المهم أن نفهم أن:

  • تعطيل "الوصول المباشر" يزيل فقط زر الانضمام من الأماكن الفرعية على الموقع - ولا يمنع النقل المبتدأ من العميل
  • افترض أن المستغلين سيكتشفون وجود جميع الأماكن الفرعية داخل عالمك
  • يمكن للعميل الانتقال إلى أي مكان فرعي إذا كان بإمكانه الوصول إلى مكان واحد، مثل المكان الرئيسي، بغض النظر عن تدفق التصميم المقصود لديك

يحاول العديد من المطورين منع الوصول من خلال طرد المستخدمين غير المصرح لهم من المكان الفرعي. قد يكون هذا مجديًا في حظر اللعب، لكنه لا يمنع المحتوى من النسخ إلى العميل، حيث تبدأ عملية النسخ بمجرد انضمام اللاعب وقبل أن تتمكن من تنفيذ منطق الطرد من جانب الخادم.

استخدم النقل الآمن

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

لخطوات التهيئة وإرشادات الهجرة لتجارب موجودة تستخدم النقل المبتدأ من العميل، راجع النقل بين الأماكن.

الدفاع العميق للأماكن المقيدة

بالنسبة للعوالم التي لا يمكنها استخدام النقل الآمن، أو كطبقات إضافية من الحماية إلى جانبها، اجمع بين التدابير التالية:

  • احتفظ بأماكن التطوير والاختبار في عوالم خاصة منفصلة - هذه هي الطريقة الوحيدة الموثوقة لضمان الخصوصية للمحتوى غير المعلن عنه. لا تشحن أصول الأحداث السرية، السكربتات، أو عناصر الواجهة إلى بيئة الإنتاج قبل أن يكون من المقصود أن تكون نشطة.
  • إذا أمكن، استخدم البث لتقليل مدى ما يتم نسخه من العالم إلى لاعب جديد.
  • أضف تحقق من دور المجموعة أو الشارة على جانب الخادم وتحقق من حالة اللاعب أو متطلبات التقدم.
  • بشكل افتراضي، ارفض اللاعبين القادمين. يضمن ذلك عدم السماح لأي لاعب بالدخول حتى لو كانت عملية التحقق غير حاسمة، مثل حالة حدوث استثناء من المحرك.
  • إذا كان ذلك عمليًا، استخدم Ban API للاعبين الذين يفشلون في التحقق. يمنع ذلك اللاعبين من محاولة الانضمام بشكل مستمر على نفس الحساب.

النسخ

تصف عملية النسخ كيف تنتقل الحالة عبر الشبكة بين مثيلات المحرك. نموذج النسخ في Roblox مبسط عمومًا بعدة طرق مفتاحية:

  • تكون المثيلات مرجعية للخادم، مما يعني أنه لكي يتم نسخ مثيل ما بين جميع المشاركين (الخادم وجميع العملاء المتصلين) يجب إنشاؤه على الخادم.
  • خصائص المثيل أيضًا مرجعية للخادم، مما يعني أن معظم الخصائص يجب تغييرها على الخادم لكي تظهر التغييرات على جميع العملاء.
  • عمومًا، إما أن يتم نسخ المثيل إلى جميع العملاء المتصلين أو لا يتم نسخها. هناك بعض الاستثناءات، مثل البث.

حاويات النسخ هي مثيلات على المستوى الأعلى (موضوعة تحت DataModel) تقوم بالنسخ إلى العملاء. إذا أصبح المثيل في أي وقت تابعًا لحاوية نسخ طوال حياته، يجب أن تتوقع أن يتم نسخ الكثير من حالته إلى جميع العملاء. يمكنك قراءة المزيد عن حاويات النسخ الشائعة في دليل نموذج البيانات. عندما تكون في شك، يمكنك دائمًا التحقق من كيفية نسخ مثيل أو خاصية في بيئة اختبار مثل Play Solo. يمكنك قراءة المزيد عن أوضاع الاختبار في أوضاع اختبار الاستوديو.

الآثار الأمنية للنسخ

أي محتوى يتم نسخه إلى عميل يمكن استخراجه والتعدين البيانات بواسطة مستغل. كقاعدة عامة، تجنب نشر أو شحن أي محتوى سري إلى بيئة الإنتاج الحية ما لم تكن مستعدًا فورًا لأن يراه المستخدمون. حتى إذا كانت هناك منطق يحدد إمكانية إطلاق أو الوصول للمحتوى في التجربة حتى تاريخ لاحق (أو شرط آخر)، افترض أن المستغلين سيجدون وسيلة لاكتشاف وتسريب محتواك بمجرد نشره.

تجنب الأسماء الموصوفة بشكل مفرط أو القابلة للتنبؤ للمثيلات الحساسة، بما في ذلك ولكن لا تقتصر على: السكربتات، العمليات البعيدة، والنماذج. تجعل وجود تسلسل هرمي لـ DataModel قابل للتنبؤ الأمر أسهل لتطوير الاستغلالات.

فك تجميع السكربت

يمكن فك تجميع أي LocalScript، أو Script مع RunContext::Client، أو ModuleScript بواسطة مستغل بمجرد أن يتم نسخه إلى عميلهم، حتى إذا كانت هذه السكربتات معطلة، أو غير مطلوبة، أو لم يتم تشغيلها أبدًا على العميل. لا يمكن فك تجميع السكربتات والModuleScripts الخاصة بالخادم المخزنة في ServerStorage أو ServerScriptService لأنها لا يتم نسخها أبدا إلى العملاء.

من غير المستحسن كتابة ModuleScript يتضمن كودًا خاصًا بالخادم وآخر خاصًا بالعميل في نفس السكربت حيث سيتم عرض منطق الجانب الخادم في فك التجميع ويمكن تحليله بسهولة أكبر لاكتشاف الأخطاء التي يمكن استغلالها.

ModuleScript الأصلي في ReplicatedStorage

local module = {}
local Remote = script:WaitForChild("RemoteEvent")
-- إليك مثال على نموذج يجب تجنبه
-- احتفظ بالكود الخاص بالخادم في مثيلات السكربت أو في ServerStorage/ServerScriptStorage!
if game:GetService("RunService"):IsServer() then
function module:DoServerThing(password)
if password == "SecretPassword" then
print("كود خادم حساس")
end
end
Remote.OnServerEvent:Connect(function(player, password)
module:DoServerThing(password)
end)
else
function module:DoServerThing(password)
Remote:FireServer(password)
end
end
return module
نتيجة فك التجميع

local table1 = {};
local RemoteEvent = script:WaitForChild("RemoteEvent");
if game:GetService("RunService"):IsServer() then
function table1.DoServerThing(_, p2) -- السطر: 9
if p2 == "SecretPassword" then
print("كود خادم حساس");
end
end
RemoteEvent.OnServerEvent:Connect(function(player: Player, p3) -- السطر: 15
--[[
القيم الصاعدة:
[1] = table1
--]]
table1:DoServerThing(p3);
end);
return table1;
end
function table1.DoServerThing(_, p1) -- السطر: 19
--[[
القيم الصاعدة:
[1] = RemoteEvent
--]]
RemoteEvent:FireServer(p1);
end
return table1;

كما هو موضح أعلاه، يكشف فك التجميع عن منطق جانب الخادم بما في ذلك كلمات المرور المشفرة، القواعد التجارية، وبيانات التنفيذ التي يمكن أن يحللها المستغلون للعثور على الثغرات.

تأثير خروقات الخصوصية

يمكن أن يكون لخروقات الخصوصية عواقب كبيرة، مثل:

  • تسريبات محتوى: قد يتم اكتشاف عناصر، خرائط، أو ميزات غير معلن عنها ومشاركتها علنًا قبل الإعلانات الرسمية
  • عيب تنافسي: يمكن أن يتم عكس هندسة الآليات، الخوارزميات، أو الميزات القادمة من قبل المنافسين
  • تطوير الاستغلال: يجعل منطق الخادم المكشوف الأمر أسرع وأسهل للمستغلين لتحديد الثغرات وتطوير هجمات مستهدفة
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.