2024 年 PHP 日本大会

与标准 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