PHP Conference Japan 2024

與標準 Lua 的差異

LuaSandbox 提供了一個沙盒環境,它在某些方面與標準 Lua 5.1 不同。

不支援的功能

  • dofile()loadfile() 以及 io 套件,因為它們允許直接存取檔案系統。如果需要,檔案系統的存取應該透過 PHP 回呼函式來完成。

  • package 套件,包含 require()module(),因為它高度依賴直接的檔案系統存取。可以改用純 Lua 重寫的版本,例如 MediaWiki Scribunto extension 所使用的套件。

  • 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