在 Windows 下使用 Lua 沙箱和 MediaWiki

我在 Windows 服务器上运行一个 MediaWiki(1.34.1)。该维基包含一些由运行 Lua 5.1.4 的 Scribunto 扩展执行的 Lua 模块。 到目前为止,我使用的是 luastandalone,但我想使用 luasandbox 引擎(应该更快)。

最新的 PHP luasandbox 发布版 4.0.2 PECL 提供了一个 Windows DLL(https://pecl.php.net/package/LuaSandbox/4.0.2/windows)。

使用这个 DLL 可以在 Windows 下运行 luasandbox 吗? 我应该如何安装/配置 PHP/MediaWiki/Scribunto 环境来使用这个 DLL?

点赞
用户200794
用户200794

是的,在IIS下使用LuaSandbox是可能的,并且实际上是一种特别方便的方式。您只需将必要的Lua二进制文件作为“PHP扩展”安装到您现有的PHP解释器中(因为MediaWiki是用PHP实现的,所以您知道它是可用的)。

我在Extension Talk:Scribunto页面上有详细讨论,但这里也提供了要点:

我最终在Windows 10的IIS下,使用PHP 8.0,成功让Lua工作了。诀窍是我完全放弃了luaStandalone二进制文件,而是从PECL下载了(仅在不到两个月前发布的)PHP luaSandbox扩展:

https://pecl.php.net/package/LuaSandbox

点击“DLL”,然后选择与您的PHP安装匹配的版本(对我来说是PHP 8.0,x64,非线程安全——详细信息在命令行上的php.exe -i的长长输出的顶部),并下载提供的zip文件。解压后,只有两个文件很重要:

  • php_luasandbox.dll,一个PHP扩展模块,放置在其余扩展的任何地方。(对我来说是C:\Program Files\PHP\v8.0\ext\。)
  • lua5.1.dll,一个可嵌入的Lua解释器,安装在php.exe二进制文件所在的目录中。(对我来说,那是C:\Program Files\PHP\v8.0\,扩展位置的父目录。)

然后,只需编辑您的php.ini以添加:

extension=php_luasandbox.dll

并编辑LocalSettings.php以包括:

$wgScribuntoDefaultEngine = 'luasandbox';

(确保删除或注释任何有关luaStandalone的行。)

重新启动IIS,那应该就行了。如果您已经使MediaWiki正常工作,则已经运行PHP,因此使用Lua这种方式,作为PHP扩展,就是再合理不过的了。

如我在MediaWiki讨论中指出的,因为Lua开发人员对“沙盒Lua”这个概念有点抗拒,所以这方面存在一些争议。他们不相信它是限制Lua访问和消耗系统资源的一种技术上可行的方法。但在Windows上,他们建议对独立二进制文件施加的大多数限制在操作系统中都不可用,使得情况更加混乱/不清楚。

2022-01-30 23:02:15