最终用户脚本

时间:2012-04-13 13:58:43

标签: javascript python lua sandbox

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

Lua具有良好的沙盒功能,干净简洁。

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

此外,如果您决定将Lua用于受信任的代码并将其与不受信任的代码连接,则可以使用coroutinesdebug.sethook来控制CPU使用率。

Lua Wiki有一个简单的example sandbox source codelua live demo也可能会引起人们的兴趣。

答案 1 :(得分:1)

Tcl拥有非常强大的sanbox模型,可以说是最终用户脚本编写的更好语言之一。您可以在safe interpreter手册页上阅读有关它的更多信息。