การควบคุมการเข้าถึงและความลับ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

การเข้าใจว่าข้อมูลและทรัพย์สินใดบ้างที่มองเห็นได้โดยลูกค้าเป็นสิ่งสำคัญสำหรับการรักษาความปลอดภัยและความลับของเกมของคุณ ผู้พัฒนามักจะประเมินค่าต่ำเกินไปว่ามีอะไรบ้างที่มองเห็นได้โดยผู้ใช้ที่ใช้ประโยชน์และถูกทำซ้ำไปยังลูกค้า ผู้ใช้ที่ใช้ประโยชน์สามารถเข้าถึงสถานที่ที่ "ถูกจำกัด" ภายในจักรวาลของคุณได้หากพวกเขาสามารถเข้าร่วมสถานที่เดียว พวกเขาสามารถดูเนื้อหาทุกอย่างที่ถูกทำซ้ำไปยังลูกค้าของพวกเขา ไม่ว่าจะมองเห็นได้หรือใช้งานอยู่ในขณะนั้นหรือไม่ นอกจากนี้ ผู้ใช้ที่ใช้ประโยชน์ยังสามารถถอดรหัสสคริปต์ท้องถิ่นและ ModuleScripts ที่ถูกทำซ้ำได้ แม้ว่าสคริปต์เหล่านั้นจะไม่เคยถูกเรียกใช้บนลูกค้าก็ตาม

การเคลื่อนย้ายลูกค้าภายในจักรวาล

เมื่ออยู่ภายในจักรวาล ลูกค้าสามารถเคลื่อนย้ายไปยังสถานที่ใดก็ได้ภายในจักรวาลนั้น ซึ่งอาจทำให้ข้ามข้อจำกัดการเข้าถึงหรือประตูการก้าวหน้าใดๆ ที่ตั้งใจไว้ สิ่งนี้อาจนำไปสู่การรั่วไหลของเนื้อหาที่ยังไม่ได้เผยแพร่โดยไม่ได้ตั้งใจ เช่น จากเกมพัฒนา หรือเกมทดสอบ สิ่งสำคัญคือต้องเข้าใจว่า:

  • การปิด "การเข้าถึงโดยตรง" จะลบปุ่มเข้าร่วมจากสถานที่ย่อยบนเว็บไซต์เท่านั้น — ไม่ได้ป้องกันการเคลื่อนย้ายที่เริ่มต้นจากลูกค้า
  • สมมติว่าผู้ใช้ที่ใช้ประโยชน์จะค้นพบการมีอยู่ของสถานที่ย่อยทั้งหมดภายในจักรวาลของคุณ
  • ลูกค้าสามารถเคลื่อนย้ายไปยังสถานที่ย่อยใดก็ได้หากพวกเขาสามารถเข้าถึงสถานที่เดียว เช่น สถานที่หลัก โดยไม่คำนึงถึงการออกแบบที่คุณตั้งใจไว้

นักพัฒนาหลายคนพยายามป้องกันการเข้าถึงโดยการเตะผู้ใช้ที่ไม่ได้รับอนุญาตออกจากสถานที่ย่อย วิธีนี้อาจใช้ได้ผลในการบล็อกการเล่นเกม แต่ไม่สามารถป้องกันเนื้อหาจากการทำซ้ำไปยังลูกค้าได้ เนื่องจากการทำซ้ำเริ่มต้นขึ้นทันทีที่ผู้เล่นเข้าร่วมและก่อนที่ตรรกะการเตะจากเซิร์ฟเวอร์จะสามารถทำงานได้

ใช้การเคลื่อนย้ายที่ปลอดภัย

วิธีที่มีประสิทธิภาพที่สุดในการป้องกันการเข้าถึงที่ไม่ได้รับอนุญาตผ่านการเคลื่อนย้ายคือการตั้งค่า การควบคุมการเข้าถึงสำหรับสถานที่ เป็น ปลอดภัยภายในจักรวาลเท่านั้น ใน Creator Dashboard ซึ่งจะจำกัดสถานที่ที่ไม่เริ่มต้นทั้งหมดให้สามารถเคลื่อนย้ายได้เฉพาะจากเซิร์ฟเวอร์เท่านั้น โดยบล็อกการเคลื่อนย้ายที่เริ่มต้นจากลูกค้าระดับแพลตฟอร์มก่อนที่ผู้เล่นจะเข้าร่วมสถานที่ย่อย เนื่องจากผู้เล่นไม่เคยเข้าร่วม จึงไม่มีเนื้อหาทำซ้ำไปยังพวกเขา

สำหรับขั้นตอนการกำหนดค่าและแนวทางการย้ายข้อมูลสำหรับเกมที่มีการเคลื่อนย้ายที่เริ่มต้นจากลูกค้า ดูที่ การเคลื่อนย้ายระหว่างสถานที่.

การป้องกันเชิงลึกสำหรับสถานที่ที่ถูกจำกัด

สำหรับจักรวาลที่ไม่สามารถใช้การเคลื่อนย้ายที่ปลอดภัยได้ หรือเป็นชั้นการป้องกันเพิ่มเติมควบคู่กับการเคลื่อนย้ายที่ปลอดภัย ให้รวมมาตรการต่อไปนี้:

  • เก็บสถานที่พัฒนาและทดสอบในจักรวาลที่แยกต่างหากและเป็นส่วนตัว — นี่เป็นวิธีเดียวที่เชื่อถือได้ในการรับประกันความลับสำหรับเนื้อหาที่ยังไม่ได้เผยแพร่ อย่าส่งทรัพย์สินของเหตุการณ์ที่เป็นความลับ สคริปต์ หรือองค์ประกอบ UI ไปยังสภาพแวดล้อมการผลิตก่อนที่พวกเขาจะตั้งใจให้ใช้งาน
  • หากเป็นไปได้ ให้ใช้การสตรีมเพื่อลดปริมาณของโลกที่ทำซ้ำไปยังผู้เล่นใหม่
  • เพิ่มการตรวจสอบบทบาทกลุ่มหรือเหรียญตราจากเซิร์ฟเวอร์และตรวจสอบสถานะหรือข้อกำหนดการก้าวหน้าของผู้เล่น
  • โดยค่าเริ่มต้น ให้ปฏิเสธผู้เล่นที่เข้ามา นี่จะทำให้แน่ใจว่าไม่มีผู้เล่นคนใดจะได้รับอนุญาตแม้ว่ากระบวนการตรวจสอบจะไม่ชัดเจน เช่น ในกรณีที่มีข้อยกเว้นที่เกิดจากเอนจิน
  • หากเป็นไปได้ ให้ใช้ Ban API สำหรับผู้เล่นที่ไม่ผ่านการตรวจสอบ นี่จะป้องกันไม่ให้ผู้เล่นพยายามเข้าร่วมอย่างต่อเนื่องด้วยบัญชีเดียวกัน

การทำซ้ำ

การทำซ้ำหมายถึงวิธีการถ่ายโอนสถานะผ่านเครือข่ายระหว่างอินสแตนซ์ของเอนจิน โมเดลการทำซ้ำของ Roblox โดยทั่วไปจะถูกทำให้เรียบง่ายในบางวิธีหลัก:

  • อินสแตนซ์มีอำนาจจากเซิร์ฟเวอร์ ซึ่งหมายความว่าเพื่อให้มีการทำซ้ำระหว่างผู้เข้าร่วมทั้งหมด (เซิร์ฟเวอร์และลูกค้าที่เชื่อมต่อทั้งหมด) จะต้องถูกสร้างขึ้นบนเซิร์ฟเวอร์
  • คุณสมบัติของอินสแตนซ์ก็มีอำนาจจากเซิร์ฟเวอร์เช่นกัน ซึ่งหมายความว่าคุณสมบัติส่วนใหญ่ต้องถูกเปลี่ยนแปลงบนเซิร์ฟเวอร์เพื่อให้การเปลี่ยนแปลงนั้นมองเห็นได้บนลูกค้าทั้งหมด
  • โดยทั่วไปแล้ว อินสแตนซ์จะทำซ้ำไปยังลูกค้าที่เชื่อมต่อทั้งหมดหรือไม่ทำซ้ำเลย มีข้อยกเว้นบางประการ เช่น การสตรีม

คอนเทนเนอร์การทำซ้ำเป็นอินสแตนซ์ระดับสูง (ที่อยู่ภายใต้ DataModel) ที่ทำซ้ำไปยังลูกค้า หากอินสแตนซ์ใดๆ กลายเป็นลูกหลานของคอนเทนเนอร์การทำซ้ำในช่วงชีวิตของมัน คุณควรคาดหวังว่าสถานะส่วนใหญ่ของมันจะทำซ้ำไปยังลูกค้าทั้งหมด คุณสามารถอ่านเพิ่มเติมเกี่ยวกับคอนเทนเนอร์การทำซ้ำทั่วไปใน คู่มือโมเดลข้อมูล. เมื่อไม่แน่ใจ คุณสามารถตรวจสอบได้เสมอว่าอินสแตนซ์หรือคุณสมบัติทำซ้ำอย่างไรในสภาพแวดล้อมทดสอบเช่น Play Solo คุณสามารถอ่านเพิ่มเติมเกี่ยวกับโหมดการทดสอบใน โหมดการทดสอบของ Studio.

ผลกระทบด้านความปลอดภัยของการทำซ้ำ

เนื้อหาทุกอย่างที่ทำซ้ำไปยังลูกค้าสามารถถูกดึงออกและทำการขุดข้อมูลโดยผู้ใช้ที่ใช้ประโยชน์ โดยทั่วไปแล้ว ควรหลีกเลี่ยงการเผยแพร่หรือส่งเนื้อหาที่เป็นความลับไปยังสภาพแวดล้อมการผลิตสด เว้นแต่คุณจะเตรียมพร้อมสำหรับการเห็นโดยผู้ใช้ในทันที แม้ว่าจะมีกระบวนการที่ควบคุมการเผยแพร่หรือการเข้าถึงเนื้อหาในเกมจนกว่าจะถึงวันที่ภายหลัง (หรือเงื่อนไขอื่นใด) ให้สมมติว่าผู้ใช้ที่ใช้ประโยชน์จะหาวิธีค้นพบและรั่วไหลเนื้อหาของคุณทันทีที่เผยแพร่

หลีกเลี่ยงการตั้งชื่อที่มีรายละเอียดมากเกินไปหรือคาดเดาได้สำหรับอินสแตนซ์ที่ละเอียดอ่อน รวมถึงแต่ไม่จำกัดเพียง: สคริปต์, รีโมท, และโมเดล การมีลำดับชั้น DataModel ที่คาดเดาได้ทำให้การพัฒนาการใช้ประโยชน์ทำได้ง่ายขึ้น

การถอดรหัสสคริปต์

LocalScript, Script ที่มี RunContext::Client หรือ ModuleScript สามารถถูกถอดรหัสโดยผู้ใช้ที่ใช้ประโยชน์ได้เมื่อถูกทำซ้ำไปยังลูกค้าของพวกเขา แม้ว่าสคริปต์ดังกล่าวจะถูกปิดใช้งาน ไม่เคยถูกเรียกใช้ หรือไม่เคยทำงานบนลูกค้าก็ตาม สคริปต์และ ModuleScripts ที่มีเฉพาะเซิร์ฟเวอร์ที่เก็บอยู่ใน ServerStorage หรือ ServerScriptService ไม่สามารถถูกถอดรหัสได้เนื่องจากไม่เคยทำซ้ำไปยังลูกค้า

การเขียน ModuleScript ที่รวมโค้ดเฉพาะเซิร์ฟเวอร์และโค้ดเฉพาะลูกค้าในสคริปต์เดียวกันนั้นไม่แนะนำ เนื่องจากตรรกะที่อยู่ด้านเซิร์ฟเวอร์จะถูกเปิดเผยในการถอดรหัสและสามารถถูกวิเคราะห์เพื่อหาข้อบกพร่องที่สามารถถูกใช้ประโยชน์ได้ง่ายขึ้น

ModuleScript ดั้งเดิมใน ReplicatedStorage
local module = {}
local Remote = script:WaitForChild("RemoteEvent")
-- นี่คือตัวอย่างของแนวทางที่ควรหลีกเลี่ยง
-- เก็บโค้ดเซิร์ฟเวอร์ในอินสแตนซ์ Script หรือใน 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
--[[
Upvalues:
[1] = table1
--]]
table1:DoServerThing(p3);
end);
return table1;
end
function table1.DoServerThing(_, p1) -- บรรทัด: 19
--[[
Upvalues:
[1] = RemoteEvent
--]]
RemoteEvent:FireServer(p1);
end
return table1;

ตามที่แสดงข้างต้น การถอดรหัสเผยให้เห็นตรรกะด้านเซิร์ฟเวอร์รวมถึงรหัสผ่านที่ถูกตั้งค่าไว้ล่วงหน้า กฎทางธุรกิจ และรายละเอียดการดำเนินการที่ผู้ใช้ที่ใช้ประโยชน์สามารถวิเคราะห์เพื่อหาจุดอ่อน

ผลกระทบของการละเมิดความลับ

การละเมิดความลับสามารถมีผลกระทบที่สำคัญ เช่น:

  • การรั่วไหลของเนื้อหา: รายการ แผนที่ หรือฟีเจอร์ที่ยังไม่ได้เผยแพร่อาจถูกค้นพบและแชร์ต่อสาธารณะก่อนการประกาศอย่างเป็นทางการ
  • ความเสียเปรียบทางการแข่งขัน: กลไก อัลกอริธึม หรือฟีเจอร์ที่กำลังจะมาถูกวิศวกรรมย้อนกลับโดยคู่แข่ง
  • การพัฒนาการใช้ประโยชน์: ตรรกะเซิร์ฟเวอร์ที่ถูกเปิดเผยทำให้ผู้ใช้ที่ใช้ประโยชน์สามารถระบุจุดอ่อนและพัฒนาการโจมตีที่มุ่งเป้าได้เร็วขึ้นและง่ายขึ้น
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ