我想在应用程序中提供最终用户脚本(在服务器端运行)。我一直在读书,发现沙盒比我想象的要多得多。
我真的不在乎语言是什么。 LUA,Python,JavaScript,我对任何可读的东西都很好。
在不受信任的脚本中运行函数,传递一些信息并获得更多信息有多难?我读过JVM安全管理器是不行的,而且Python几乎是不可拆卸的,但我对这个主题知之甚少,无法真正判断出来源。
例如,我如何解释JS中带有JSON(来自Java,或Python,甚至node.js)的函数,并获取返回的JSON?
我想避免自己实现一个pythonish i-just-know-it-suck语言解释器。
答案 0 :(得分:4)
Lua具有良好的沙盒功能,干净简洁。
它具有可以在特定环境中运行代码的setfenv()函数。不受信任的代码只能访问特定环境中的内容
对于C函数,例如string.rep
,可以通过用Lua函数替换它们或向lua_newstate
提供自定义内存分配器来防止内存过度消耗。
此外,如果您决定将Lua用于受信任的代码并将其与不受信任的代码连接,则可以使用coroutines和debug.sethook
来控制CPU使用率。
Lua Wiki有一个简单的example sandbox source code的lua live demo也可能会引起人们的兴趣。
答案 1 :(得分:1)
Tcl拥有非常强大的sanbox模型,可以说是最终用户脚本编写的更好语言之一。您可以在safe interpreter手册页上阅读有关它的更多信息。