与标准 Lua 的差异

LuaSandbox 提供了一个沙箱环境,它在某些方面与标准 Lua 5.1 不同。

不可用的功能

  • dofile()loadfile()io 包,因为它们允许直接访问文件系统。如果需要,文件系统访问应通过 PHP 回调完成。

  • package 包,包括 require()module(),因为它严重依赖于直接文件系统访问。可以使用纯 Lua 重写(如 MediaWiki Scribunto 扩展中使用的),以替代此包。

  • load()loadstring(),以便进行 Lua 代码的静态分析。

  • print(),因为它输出到标准输出。如果需要,输出应通过 PHP 回调完成。

  • os 包中的大部分内容,因为它允许操作进程并执行其他进程。

    • os.clock()os.date()os.difftime()os.time() 仍然可用。

  • debug 包中的大部分内容,因为它允许操作 Lua 状态和元数据,而这可能会破坏沙箱。

    • debug.traceback() 仍然可用。

  • string.dump(),因为它可能会公开内部数据。

  • collectgarbage()gcinfo()coroutine 包尚未经过安全审查。

已修改的功能

  • pcall()xpcall() 无法捕获某些错误,尤其是超时错误。

  • tostring() 不包含指针地址。

  • string.match() 已被修补,以限制递归深度并定期检查超时。

  • math.random()math.randomseed() 被替换为不与 PHP 的 rand() 共享状态的版本。

  • Lua 5.2 的 __pairs__ipairs 元方法由 pairs()ipairs() 支持。

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top