最终用户脚本

sle*_*ica 5 javascript python lua sandbox

我想在应用程序中提供最终用户脚本(在服务器端运行).我一直在读书,发现沙盒比我想象的要多得多.

我真的不在乎语言是什么.LUA,Python,JavaScript,我对任何可读的东西都很好.

在不受信任的脚本中运行函数,传递一些信息并获得更多信息有多难?我已经阅读过JVM安全管理器是一个禁忌,而且Python几乎是不可拆卸的,但我对该主题知之甚少,无法真正判断出来源.

例如,我如何解释JS中带有JSON(来自Java,或Python,甚至node.js)的函数,并获取返回的JSON?

我想避免自己实现一个pythonish i-just-know-it-suck语言解释器.

mat*_*ull 4

Lua具有良好的沙箱功能,并且干净简单。

它具有setfenv()函数,可以在特定环境中运行代码。不受信任的代码只能访问特定环境中的内容。
对于 C 函数,例如string.rep,您可以通过将其替换为 Lua 函数或为 提供自定义内存分配器来防止内存过度消耗lua_newstate

另外,如果您决定将 Lua 用于可信代码并使其与不可信代码交互,则可以使用协程debug.sethook控制 CPU 使用率。

Lua Wiki 有一个简单的沙箱示例lua 现场演示源代码
可能也会令人感兴趣。