CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
Lua进阶安全加密

【野路子】脚本沙盒:安全执行第三方 Lua 代码

2026-09-20 07:41 作者:996 技术组 4 阅读 996引擎Lua教程传奇脚本

什么时候需要沙盒

让玩家的 Lua 脚本在你服务器上跑、加载策划写的活动脚本、执行热更补丁包——这些场景的共同点是:代码不完全可信,但业务又必须执行它。直接 load 后执行等于把整个引擎交给对方:os.execute、io 库、甚至一个死循环就能把进程拖死。沙盒的目标是"让不可信代码能干活,但只能在你画的圈里干活"。

第一层:环境白名单

Lua 5.1 用 setfenv、5.3+ 用 _ENV,原理相同——给不可信代码换一个阉割过的全局环境。做法是构造一个白名单表,只放你认为安全的函数,找不到的再透传到只读的真全局:

lua
local safe = {
    pairs = pairs, ipairs = ipairs,
    table = table, string = string,
    math = { floor = math.floor, abs = math.abs },
    print = release_print,
}
setmetatable(safe, { __index = function(_, k)
    error("沙盒禁止访问: " .. tostring(k), 2)
end })

local f = load(untrustedCode, "patch", "t", safe)   -- 5.4:第四参数即 _ENV
if f then f() end

白名单的取舍原则:字符串、数学库基本安全;io、os 只保留必要的封装(比如只允许写指定目录的日志);load、require、debug 一律禁——它们是逃逸沙盒的三条暗道(load 能再造环境,debug.getupvalue 能摸到外面的真全局)。

第二层:资源限额

环境白名单挡住"干坏事",限额挡住"意外干爆"。两个必备限额:执行时间——用 debug.sethook 设计数钩子,每 100 万条指令检查一次已用时间,超时就 error 掉整个脚本;内存配额——定时对比 collectgarbage("count"),增量超限同样终止。没有这两个限额,一个策划手误的死循环就能让整个 M2 停摆,比恶意代码更常见。

lua
local budget = 5e7   -- 指令预算
debug.sethook(function()
    budget = budget - 1e6
    if budget <= 0 then error("沙盒脚本执行超时", 2) end
end, "", 1e6)
-- ... 执行不可信代码 ...
debug.sethook()

第三层:结果校验与隔离

沙盒脚本的产出要当输入对待:它生成的表、注册的回调、请求的接口调用,全部过一遍业务校验再采纳。执行环境用临时 table 隔离,跑完整体丢弃,不在主环境里留任何痕迹。

工程上的经验是:沙盒能力越强,白名单越难维护。把"允许第三方脚本做的事"收敛成十几个明确的 API(发公告、改数值、查数据),比开放一个缩水的完整标准库安全得多——沙盒设计的最高境界,是让不可信代码根本接触不到危险能力,而不是拦截它。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

框架设计宠物系统

【框架设计】宠物进阶:进化材料链与形态切换

实战应用:用在哪里 宠物是玩家的小伙伴也是第二战力:幼年麒麟进化成少年再进化成最终形态,形态的每一次切换都带来属性与外观的跃…

2026-09-21 20:45 996 技术组 · 0 阅读
框架设计坐骑系统

【框架设计】坐骑系统:碎片合成与品质保底

实战应用:用在哪里 坐骑是移动的速度与身份的炫耀:赤兔马的 30% 移速加成与拉风的外观让坐骑成为追逐的目标。坐骑的框架要点…

2026-09-21 20:45 996 技术组 · 0 阅读
网络通信社交系统

【网络通信】动作与表情:社交广播的轻量协议

实战应用:用在哪里 角色的一个招手、一个跳舞、一个怒吼的表情,是无需文字的社交语言。动作与表情的广播协议要点是轻量的编码、视…

2026-09-21 20:45 996 技术组 · 0 阅读
性能调优异步处理

【性能调优】延迟结算:非紧急任务的队列消化

实战应用:用在哪里 不是每一件事都要立刻做完:掉落的归属结算、邮件的批量投递、排行榜的更新——非紧急的任务进队列慢慢消化,玩…

2026-09-21 20:45 996 技术组 · 0 阅读
安全加密隐私保护

【安全加密】数据脱敏:日志与取证导出的隐私处理

实战应用:用在哪里 日志与取证导出里躺着玩家的隐私:全名的记录、完整的手机号、身份证的原文——数据的二次流转(客服查阅、取证…

2026-09-21 20:45 996 技术组 · 0 阅读
界面UI战斗系统

【界面UI】BUFF 图标栏:增益排列与剩余时间

实战应用:用在哪里 战斗中身上挂着七八个增益:祝福、护盾、疾跑、中毒——BUFF 图标栏是状态的仪表盘。图标栏的要点是增益的…

2026-09-21 20:45 996 技术组 · 0 阅读